我需要验证用户提供其姓名和电话号码的表格。我有一个正则表达式,可以确保名称仅包含字母,没有其他内容,对于数字输入,我还需要确保字段中只有数字。我的代码看起来像
validator: (value) => value.isEmpty
? 'Enter Your Name'
: RegExp(
'!@#<>?":_``~;[]\|=-+)(*&^%1234567890')
? 'Enter a Valid Name'
: null,
Run Code Online (Sandbox Code Playgroud)
如果输入任何特殊字符或数字,我能得到一个以这种方式验证名称的正则表达式吗?它表示错误,这意味着只有字母是有效的,而如果输入字母或任何特殊字符,则它可以以一种方式验证数字的正则表达式变成错误,意味着仅数字输入有效
为RegExp创建一个静态的final字段,以避免每次检查值时都创建一个新实例。创建RegExp非常昂贵。
static final RegExp nameRegExp = RegExp('[a-zA-Z]');
// or RegExp(r'\p{L}'); // see /sf/ask/253245821/
static final RegExp numberRegExp = RegExp(r'\d');
Run Code Online (Sandbox Code Playgroud)
然后像
validator: (value) => value.isEmpty
? 'Enter Your Name'
: (nameRegExp.hasMatch(value)
? null
: 'Enter a Valid Name');
Run Code Online (Sandbox Code Playgroud)
基于这个答案和这个信息:
\p{L} 或 \p{Letter}:来自任何语言的任何类型的字母。
参考: http: //www.regular-expressions.info/unicode.html
用于名称验证的正则表达式:
RegExp(r"^[\p{L} ,.'-]*$",
caseSensitive: false, unicode: true, dotAll: true)
.hasMatch(my_name)
Run Code Online (Sandbox Code Playgroud)
在我看来你想要
RegExp(r'[!@#<>?":_`~;[\]\\|=+)(*&^%0-9-]').hasMatch(value)
Run Code Online (Sandbox Code Playgroud)
请注意,您需要使用原始字符串文字,将其放在-末尾,然后在结果字符类的内部转义]和\字符,然后检查是否与匹配。Notre也等于。.hasMatch(value)[0123456789][0-9]
至于第二个模式,您可以从正则表达式中删除数字范围(您需要允许)并添加一个\s模式(\s与任何空白字符匹配)以禁止输入中的空白:
RegExp(r'[!@#<>?":_`~;[\]\\|=+)(*&^%\s-]').hasMatch(value)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4113 次 |
| 最近记录: |