这个正则表达式:
^[\w\-]+([\.\w\s\-]+)*[^\s\.]$
...可以正常验证这样的字符串:
aaa.bbb.ccc
a . b . d
a_b.c
a-b.c d.e
字符串应以一个或多个字符\w
或minus
开头,并且可以包含0-n dots
,\w
或spaces
。最后,不应该有space
或dot
。
唯一的问题是它无法识别只有一个字符有效。
但是两个字符例如<{1}},aa
,a a
,a_`被识别。
问:如何更改正则表达式以将一个字母识别为有效?
答案 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个字符才能匹配。
如果您向其添加*
,它将匹配一个字符。