1

我对 RegEx 比较陌生,但遇到了问题。我想正则表达式一个名字。我希望它最多 100 个字符,至少包含 2 个字母字符,并且允许使用字符“-”。

我只检查字母字符或字母字符和连字符没有问题,但我不想要一个可能是'---------'的名称。

我没有检查连字符的代码是

var nameRegExp = /^([a-z]){2,100}$/;

对代码的解释也很受欢迎。谢谢!

4

2 回答 2

2

我猜

/^(?=.*[a-z].*[a-z])[a-z-]{1,100}$/

前瞻部分 ( ^(?=.*[a-z].*[a-z])) 检查是否至少有两个字母。这种模式(“字符串开头,后跟...”)是在正则表达式中表达附加条件的常用方法。

-正如@Mike指出的那样,您可以通过添加否定断言来限制数量:

/^(?=.*[a-z].*[a-z])(?!(?:.*-){11,})[a-z-]{1,100}$/  // max 10 dashes

然而,编写一个匹配“好”字符串而不是试图禁止“坏”字符串的表达式可能更容易。例如,这个

/^[a-z]+(-[a-z]+)*$/

看起来像是“名称”的一个很好的近似值。它允许fooand ,但不允许orfoo-bar-baz之类的东西。----foo----bar----

于 2013-04-07T17:33:22.727 回答
2

要限制您的数量,-可以添加一个负前瞻,其中数量3比您要允许的最大数量多一

/^(?!(?:[a-z]*-){3,})(?=-*[a-z]-*[a-z])[a-z-]{2,100}$/
于 2013-04-07T17:58:53.153 回答