我正试图做一个昵称验证器。这是我想要的规则:
- 总字符数必须在3到15之间
- 可以有两个非连续的空格
- 只允许输入字母(a-z)
- 每个由空格分隔的单词都可以以大写字母开头,其余单词必须为小写字母
- 至少一个单词必须包含3个或更多字符
这是我目前检查第四个规则的内容,但是我不知道如何检查最后一个规则。
^(?=.{3,15}$)(\b[A-Z]?[a-z]* ?\b){1,3}$
应该匹配:
不匹配:
Two spaces
(两个连续的空格字符)答案 0 :(得分:2)
尝试使用正则表达式:^(?=[A-Za-z ]{3,15}$)(?=[A-Za-z ]*[A-Za-z]{3})(?:\b[A-Z]?[a-z]*\ ?\b){1,3}$
对于最后一条规则,使用了没有空格的正向前瞻(?=[A-Za-z ]*[A-Za-z]{3})
答案 1 :(得分:0)
但是我不知道如何检查最后一条规则
由于您仅在正则表达式中允许[A-Za-z]
和空格,因此您可以简单地使用looks ahead中的non white-space来表示3个lazily字符。 (?=.*?\S{3})
与Here is a demo at regex101匹配任意数量的任何字符。
只要需要3个非空格字符,则.*?
中已经要求至少3个字符,因此可以将初始超前提高为负数^(?!.{16})
⇒ \S{3}
此外,您可以删除开头的[A-Za-z][a-z]*
,这是多余的,因为之前只能有开始或空格。
\b
SO regex faq(有关正则表达式的更多信息,请参见atomic groups)
如果您的工具支持(?>
instead of (?:
,请使用a Prisma tutorial