正则表达式不会仅验证一个字符

时间:2016-02-23 11:10:47

标签: javascript regex

这个正则表达式:

^[\w\-]+([\.\w\s\-]+)*[^\s\.]$

...可以正常验证这样的字符串:

aaa.bbb.ccc
a . b . d
a_b.c
a-b.c d.e

字符串应以一个或多个字符\wminus开头,并且可以包含0-n dots\wspaces。最后,不应该有spacedot

唯一的问题是它无法识别只有一个字符有效。 但是两个字符例如<{1}},aaa a,a_`被识别。

问:如何更改正则表达式以将一个字母识别为有效?

2 个答案:

答案 0 :(得分:2)

您可以使用lookarounds来强加这些限制:

^(?=[\w-])(?!.*[\s.]$)[.\w\s-]+$
  ^^^^^^^^^^^^^^^^^^^^

请参阅regex demo

由于前瞻(?!.*[\s.]$)(?=[\w-])不使用字符,[.\w\s-]+子模式只能匹配1个字符的字符串。

(?!.*[\s.]$)检查字符串(不带换行符号,否则将.替换为[\s\S])结束时不会以空格或.结尾。

(?=[\w-]) ^检查(一次,在字符串的开头),如果字符串以-或单词字符开头。

答案 1 :(得分:1)

要更改正则表达式以将一个字母识别为有效,请在末尾添加*,如下面的示例所示。

^[\w\-]+([\.\w\s\-]+)*[^\s\.]*$

[^\s\.],最后一部分没有任何+*,你的正则表达式需要至少2个字符才能匹配。

如果您向其添加*,它将匹配一个字符。