【问题标题】:Regular expressions limit occurence for optional正则表达式限制可选的出现
【发布时间】:2021-07-27 14:03:28
【问题描述】:

我想允许任何字母或数字,如果使用,请仅在开头允许#,仅出现一次,例如#{1}。并保留我在字符 ^<>@.\/() 的表达式中已有的限制。

这是我的正则表达式:

/^[#?a-zA-z0-9][^<>@.\/()]+/g

我希望这个正则表达式通过的一些用例:

##msidfipds - fail (2 of #)
fdsfsdfd#1m - fail (# not 1st character)
vcvxcvxcvxc - pass
#fdfdsfsdfs - pass

TextField 小部件的用例。

TextField(
    inputFormatters: <TextInputFormatter>[
           FilteringTextInputFormatter.allow(RegExp(r'^#?[a-zA-Z0-9][^#<>@.\/()]*$')),
   ],
   autofocus: true,
   enableInteractiveSelection: true,
   keyboardType: TextInputType.text,
   decoration: InputDecoration(
       fillColor: Colors.transparent,
       border: InputBorder.none,
       hintText: 'Search',
   ),
   textAlign: TextAlign.center,
   style: TextFieldStyle,
),

【问题讨论】:

  • 您的第一个字符类中可能有错字,应为:[a-zA-Z0-9]
  • 啊哈,这就是 Dart。

标签: regex


【解决方案1】:

使用起始锚点,然后使用可选的量词:

/^#?[a-zA-Z0-9][^<>@.\/()]+/g

这将确保如果出现 octothorpe,它必须出现在字符串的开头。

【讨论】:

    【解决方案2】:

    你可以使用

    ^#?[a-zA-Z0-9][^#<>@.\/()]+$
    

    请参阅regex demo

    注意[A-z] matches more than just letters,您需要[A-Za-z] 才能仅匹配字母。

    详情

    • ^ - 字符串开头
    • #? - 一个可选的 # 字符
    • [a-zA-Z0-9] - 一个字母数字字符
    • [^#&lt;&gt;@.\/()]+ - 除了#&lt;&gt;@./() 之外的一个或多个字符
    • $ - 字符串结束。

    【讨论】:

    • 嘿@Wiktor,感谢您的回答,但我还没有找到解决方案。我需要那个正则表达式来限制用户输入。我找到了以下我想用于我的 TextField 的问题的答案。:stackoverflow.com/questions/56390839/… 我已经更新了我的问题,现在我的 TextField 被阻止,无法在那里输入任何内容。
    • @user12051965 也许是因为即使是单个字符输入也应该与正则表达式匹配。试试^#?[a-zA-Z0-9][^#&lt;&gt;@.\/()]*$
    • 我试过了,不能在开头输入“#”,只能输入字母和数字,当我在中间某处写#时,它会删除输入中的所有内容。
    猜你喜欢
    • 2016-05-16
    • 2018-07-07
    • 2015-12-13
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多