【问题标题】:Regex for a name and number dart名称和数字飞镖的正则表达式
【发布时间】:2019-01-31 00:38:20
【问题描述】:

我需要验证用户提供其姓名和号码的表单。我有一个正则表达式,它应该确保名称只包含字母而不包含其他任何内容,而且对于数字输入,我需要确保字段中只有数字。 我的代码看起来像

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

如果输入任何特殊字符或数字,我能否获得一个正则表达式来验证名称输入字符会出错,这意味着只有数字的输入才有效

【问题讨论】:

  • 看起来你想要RegExp(r'[!@#&lt;&gt;?":_`~;[\]\\|=+)(*&amp;^%0-9-]').hasMatch(value)。您需要使用原始字符串文字,将- 放在末尾并转义]\ 字符,然后检查是否与.hasMatch(value) 匹配。 [0123456789] = [0-9].
  • 这适用于名称正则表达式。你能解释一下第一名吗?在这一个中,用户会看到数字键盘,因此某些字符本身并不重要。我刚刚复制了名称 Regex 并将其粘贴到此处,但删除了 0-9 以便能够输入数字。问题是,当插入一个空格时,它仍然将其计为一个值。我该如何纠正这个问题。
  • 添加\s - r'[!@#&lt;&gt;?":_`~;[\]\\|=+)(*&amp;^%\s-]'
  • 是的。这行得通。您可以添加答案

标签: regex dart


【解决方案1】:

为 RegExp 创建一个静态 final 字段,以避免每次检查值时都创建一个新实例。创建 RegExp 的成本很高。

static final RegExp nameRegExp = RegExp('[a-zA-Z]'); 
    // or RegExp(r'\p{L}'); // see https://stackoverflow.com/questions/3617797/regex-to-match-only-letters 
static final RegExp numberRegExp = RegExp(r'\d');

然后像这样使用它

validator: (value) => value.isEmpty 
    ? 'Enter Your Name'
    : (nameRegExp.hasMatch(value) 
        ? null 
        : 'Enter a Valid Name');

【讨论】:

  • 两者都不起作用。在我指定的问题中,我需要一些不接受除字母之外的任何其他内容的名称。对于数字输入,数字只是不是特殊字符或其他任何东西。这个正则表达式的事情压力很大
  • 例如。对于名称,如果它是 gunter zochbauer,如果某处出现逗号,则它会出错
  • 您要求“只有字母”。您是否检查了注释掉的替代方案。如果这不是您想要的,请更准确地表述您的问题。
  • 我已经编辑了原始问题以进一步解释它。道歉
  • 我仍然认为我的回答不能回答您的问题尚不清楚。 RegExp('[a-zA-Z\ ]') 验证到 true 我的名字。
【解决方案2】:

在我看来你想要

RegExp(r'[!@#<>?":_`~;[\]\\|=+)(*&^%0-9-]').hasMatch(value)

请注意,您需要使用原始字符串文字,将- 放在末尾并在生成的字符类中转义]\ 字符,然后检查是否有匹配.hasMatch(value)。还要注意[0123456789] 等于[0-9]

至于第二个模式,您可以从正则表达式中删除数字范围(因为您需要允许它)并添加一个\s 模式(\s 匹配任何空白字符)以禁止输入中的空白:

RegExp(r'[!@#<>?":_`~;[\]\\|=+)(*&^%\s-]').hasMatch(value)

【讨论】:

    【解决方案3】:

    基于this answer 和此信息:

    \p{L} 或 \p{Letter}:来自任何语言的任何类型的字母。

    参考:http://www.regular-expressions.info/unicode.html

    名称验证的正则表达式:

    RegExp(r"^[\p{L} ,.'-]*$",
          caseSensitive: false, unicode: true, dotAll: true)
      .hasMatch(my_name)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      相关资源
      最近更新 更多