2013-04-07 114 views
1

我是RegEx的新手,我遇到了问题。我想要一个名字。我希望它是最多100个字符,至少包含2个字母字符,它将允许字符' - '。正则表达式在javascript中有特殊字符的名称

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

我没有检查的连字符代码

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

的代码的解释可以理解为好。 谢谢!

+0

所以字符串应该至少包含一个字母的最大数量一多,或者情况究竟是什么? – 2013-04-07 17:34:25

+0

至少2个字母,它可以包含字符' - ',但在同一时间至少2个字母 – Andreas 2013-04-07 17:35:30

+0

噢,对不起,我错过了2;) – 2013-04-07 17:39:03

回答

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----这样的东西。

+0

谢谢!是否可以添加规则来设置最大的' - '字符还是会更复杂? – Andreas 2013-04-07 17:43:42

+1

@Andreas:查看编辑 – georg 2013-04-07 18:27:42

+0

最后的代码片段正是我正在寻找的代码片段。非常感谢! – Andreas 2013-04-07 18:32:55

2

要限制你可以添加一个负前瞻的-数,其中数字3比你想允许

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