RegEx-要求一组最少长度

时间:2018-07-23 15:49:30

标签: regex

我正试图做一个昵称验证器。这是我想要的规则:

  
      
  • 总字符数必须在3到15之间
  •   
  • 可以有两个非连续的空格
  •   
  • 只允许输入字母(a-z)
  •   
  • 每个由空格分隔的单词都可以以大写字母开头,其余单词必须为小写字母
  •   
  • 至少一个单词必须包含3个或更多字符
  •   

这是我目前检查第四个规则的内容,但是我不知道如何检查最后一个规则。

^(?=.{3,15}$)(\b[A-Z]?[a-z]* ?\b){1,3}$

应该匹配:

  • 偏航
  • 偏航
  • 詹姆斯·邦德
  • 猴子D路飞
  • 列表项

不匹配:

  • YaW ​​
  • Two spaces(两个连续的空格字符)
  • 不,不不,
  • JamesBond

2 个答案:

答案 0 :(得分:2)

尝试使用正则表达式:^(?=[A-Za-z ]{3,15}$)(?=[A-Za-z ]*[A-Za-z]{3})(?:\b[A-Z]?[a-z]*\ ?\b){1,3}$

Demo

对于最后一条规则,使用了没有空格的正向前瞻(?=[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