【问题标题】:Javascript regexp - only if first character is not an asteriskJavascript regexp - 仅当第一个字符不是星号时
【发布时间】:2011-07-14 17:04:49
【问题描述】:

我正在使用一个 javascript 验证器,它可以让我基于 regexp 构建自定义验证

来自他们的网站:regexp=^[A-Za-z]{1,20}$ 最多允许 20 个字母字符。

如果输入字段中输入的数据超出此范围,则会返回错误。

如果值的第一个字符是星号,我需要的是会触发输入字段错误的字符串。

我可以通过以下方式触发相反的情况(如果第一个字符不是星号则错误):

regexp=[\u002A]

Heeeeelp 请:-D

【问题讨论】:

    标签: javascript regex negate


    【解决方案1】:

    怎么样:

    ^[^\*]
    

    匹配任何不以星号开头的输入;从示例正则表达式来看,任何与正则表达式不匹配的输入都将导致验证错误,因此使用双重否定你应该得到你想要的行为:-)

    我的正则表达式的解释:

    • 第一个^ 表示“在字符串的开头”
    • [ ... ] 构造是一个字符类,它匹配括号内的单个字符
    • 字符类开头的^ 表示“否定字符类”,即匹配不是所列字符之一的任何字符
    • \* 表示文字 *; * 在正则表达式中有特殊含义,所以我用反斜杠转义了它。正如 Rob 在 cmets 中指出的那样,在字符类中转义(大多数)特殊字符并不是绝对必要的

    【讨论】:

    • 你不需要转义[]里面的*
    • @Rob:你可能是对的。我发现它取决于平台,但我从来没有遇到过使用反斜杠明确转义的任何问题
    • 很公平,我只是在迂腐,因为您首先得到了答案:P
    • @Splynx: 没问题 ;-) 顺便说一句,如果您也需要将空输入作为有效输入,您可以使用:^(?:[^\*]|$)
    • 感谢您解释正则表达式!
    【解决方案2】:

    ^[^\*].+ 怎么样。

    分解:

    • ^ = 字符串开头。
    • [^\*] = 除“*”以外的任何一个字符。
    • .+ = 任何其他字符至少一次。

    【讨论】:

    • 这是 IMO 更好的答案。
    【解决方案3】:

    您可以在 [

    之后使用 ^ 反转字符类

    regexp=[^\u002A]

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多