我要求验证用户名中包含一些特殊字符(&#39 ;-)和其中的空格。我能够在以下正则表达式的帮助下实现这一目标 -
^[a-zA-z]+([ '-][a-zA-Z]+)*$
但我无法为用户输入的最大字符数添加限制,例如25表示此特定正则表达式。那么任何人都可以解释如何对上述正则表达式做同样的事情吗?感谢。
答案 0 :(得分:4)
您可以在开头添加一个负向前瞻,不允许26个或更多字符:
^(?!.{26})[a-zA-Z]+([ '-][a-zA-Z]+)*$
^^^^ ^
您还有一个拼写错误[A-z]
,它必须是[A-Z]
。请参阅Difference between regex [A-z] and [a-zA-Z]。
negative lookahead(上面的(?!...)
构造)锚定在字符串的开头(意味着它位于^
之后),长度检查只执行一次,在使用主要的消费模式部分进行解析之前。
您还可以在how a negative lookahead works here上看到更多信息。
答案 1 :(得分:3)
只需在开头添加前瞻,即可添加(?=.{1,25}$)
,最多只匹配25个字符。
您的新正则表达式将是:^(?=.{1,25}$)[a-zA-z]+([ '-][a-zA-Z]+)*$