正则表达式不接受单个字符

时间:2013-12-03 10:38:24

标签: javascript regex

我正在使用以下正则表达式进行验证,如

  • 字符串不应以空格开头
  • 字符串应为字母数字,其中包含空格,连字符和下划线

    [^-\s][a-zA-Z0-9_\s-]+$

Regular expression visualization

Debuggex Demo

但这不接受单个字符输入。任何人都可以帮我实现相同的验证,并接受单个字符的字母数字吗?

3 个答案:

答案 0 :(得分:4)

这个正则表达式应该有效:

^[\w-][\w\s-]*$

这将使第一个字符为连字符或字母数字但是休息0或更多字符是字母数字OR空格或连字符的任意组合

请注意\w代表[A-Za-z0-9_]

如果您只想要第一个字符为alpha-num,请使用:

^\w[\w\s-]*$

答案 1 :(得分:1)

正则表达式[^-\s][a-zA-Z0-9_\s-]+$正在寻找:

  • 一个不是连字符或空格的字符;然后
  • 还有一个字母数字,下划线,空格或连字符。

因此需要至少两个字符才能找到匹配项。

如果您使用第二个字符集[a-zA-Z0-9_\s-]并从中排除空格和连字符(正如您在字符串开头所需要的那样),那么您将获得[a-zA-Z0-9_]

所以,你想匹配:

^[a-zA-Z0-9_][a-zA-Z0-9_\s-]*$
  • 一个字符,可以是字母数字或下划线(在字符串的开头);然后
  • 零个或多个后续的alpha-numberic,下划线,空格或连字符。

由于\w[a-zA-Z0-9_]的等效正则表达式字符类,因此可以简化为:

^\w[\w\s-]*$

答案 2 :(得分:1)

所以你的字符串不应该以“not space or hyphen”开头,而是反之:使用'a-z,0-9,_'。

请改为尝试:

^[a-zA-Z0-9_][a-zA-Z0-9_\s-]*$

第一个字符类中的一个字符是必需的,不包含空格或连字符。之后,任何事情都会 - 或更多次。