我是RegEx的新手,我遇到了问题。我想要一个名字。我希望它是最多100个字符,至少包含2个字母字符,它将允许字符' - '。正则表达式在javascript中有特殊字符的名称
我没有问题只检查字母字符或字母字符和连字符,但我不想要一个名字,可能是'---------'。
我没有检查的连字符代码
var nameRegExp = /^([a-z]){2,100}$/;
的代码的解释可以理解为好。 谢谢!
我是RegEx的新手,我遇到了问题。我想要一个名字。我希望它是最多100个字符,至少包含2个字母字符,它将允许字符' - '。正则表达式在javascript中有特殊字符的名称
我没有问题只检查字母字符或字母字符和连字符,但我不想要一个名字,可能是'---------'。
我没有检查的连字符代码
var nameRegExp = /^([a-z]){2,100}$/;
的代码的解释可以理解为好。 谢谢!
我猜
/^(?=.*[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----
这样的东西。
要限制你可以添加一个负前瞻的-
数,其中数字3
比你想允许
/^(?!(?:[a-z]*-){3,})(?=-*[a-z]-*[a-z])[a-z-]{2,100}$/
所以字符串应该至少包含一个字母的最大数量一多,或者情况究竟是什么? – 2013-04-07 17:34:25
至少2个字母,它可以包含字符' - ',但在同一时间至少2个字母 – Andreas 2013-04-07 17:35:30
噢,对不起,我错过了2;) – 2013-04-07 17:39:03