Javascript正则表达式 - 仅当第一个字符不是星号时

14

我正在使用一个JavaScript验证器,可以让我基于正则表达式构建自定义验证。

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

如果输入字段中输入的数据超出这个范围,它将返回一个错误。

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

我可以通过以下代码使其触发相反的行为(即如果第一个字符不是星号,则出现错误):

regexp=[\u002A]

请帮忙,谢谢 :-D

3个回答

33

如何尝试:

^[^\*]

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

我的正则表达式说明:

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

2
你不需要在 [] 中转义 *。 - Rob Agar
实际上,如果输入值中有星号,而不仅仅是第一个字符是星号,这将触发验证错误... - Splynx
我的错,实际上它似乎只检查了第一个字符 - 无论如何,它的验证方式就像应该的那样 - 再次感谢你! - Splynx
2
@Splynx:没问题;-) 顺便说一下,如果您需要将空输入也视为有效输入,则可以使用:^(?:[^\*]|$) - Cameron
1
感谢您解释正则表达式! - Aaronius
显示剩余4条评论

3

如何理解 ^[^\*].+

分解:

  • ^ = 字符串的起始位置。
  • [^\*] = 任意一个字符,不是 '*'
  • .+ = 任意其他字符至少出现一次。

在我看来,这是更好的答案。 - K V

0

你可以通过在 [ 后面使用 ^ 来反转字符类

regexp=[^\u002A]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接