我对RegEx很新,我遇到了一个问题。我想正则表达名称。我希望它最多100个字符,包含至少2个字母字符,它将允许字符' - '。
我没有问题只检查字母字符或字母字符和连字符,但我不想要一个基本上可以是'---------'的名称。
我的代码没有检查连字符是
var nameRegExp = /^([a-z]){2,100}$/;
对代码的解释也很受欢迎。 谢谢!
答案 0 :(得分:2)
我想
/^(?=.*[a-z].*[a-z])[a-z-]{1,100}$/
超前部分(^(?=.*[a-z].*[a-z])
),如果有至少两个字母检查。这种模式(“字符串的开头,后跟......”)是表达正则表达式中其他条件的常用方法。
您可以通过添加否定断言来限制-
的数量,如@Mike pointed out:
/^(?=.*[a-z].*[a-z])(?!(?:.*-){11,})[a-z-]{1,100}$/ // max 10 dashes
然而,编写一个匹配“好”字符串而不是试图禁止“坏”字符串的表达式可能更容易。例如,这个
/^[a-z]+(-[a-z]+)*$/
看起来像是一个很好的“名字”近似值。它允许foo
和foo-bar-baz
,但不允许----
或foo----bar----
之类的内容。
答案 1 :(得分:2)
要限制-
的数量,您可以添加否定预测,其中数字3
比您想要允许的最大数量多一个
/^(?!(?:[a-z]*-){3,})(?=-*[a-z]-*[a-z])[a-z-]{2,100}$/