正则表达式的名称和数字飞镖

Tai*_*aio 8 regex dart

我需要验证用户提供其姓名和电话号码的表格。我有一个正则表达式,可以确保名称仅包含字母,没有其他内容,对于数字输入,我还需要确保字段中只有数字。我的代码看起来像

 validator: (value) => value.isEmpty
                        ? 'Enter Your Name'
                        : RegExp(
                                '!@#<>?":_``~;[]\|=-+)(*&^%1234567890')
                            ? 'Enter a Valid Name'
                            : null,
Run Code Online (Sandbox Code Playgroud)

如果输入任何特殊字符或数字,我能得到一个以这种方式验证名称的正则表达式吗?它表示错误,这意味着只有字母是有效的,而如果输入字母或任何特殊字符,则它可以以一种方式验证数字的正则表达式变成错误,意味着仅数字输入有效

Gün*_*uer 8

为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)


Dua*_*yen 8

基于这个答案和这个信息:

\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)


Wik*_*żew 5

在我看来你想要

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)