RegEx在javascript中使用特殊字符的名称

时间:2013-04-07 17:31:22

标签: javascript regex

我对RegEx很新,我遇到了一个问题。我想正则表达名称。我希望它最多100个字符,包含至少2个字母字符,它将允许字符' - '。

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

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

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

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

2 个答案:

答案 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]+)*$/

看起来像是一个很好的“名字”近似值。它允许foofoo-bar-baz,但不允许----foo----bar----之类的内容。

答案 1 :(得分:2)

要限制-的数量,您可以添加否定预测,其中数字3比您想要允许的最大数量多一个

/^(?!(?:[a-z]*-){3,})(?=-*[a-z]-*[a-z])[a-z-]{2,100}$/