我需要一个名称验证的正则表达式。规则是:
- 必须以字母开头;
- 必须至少有三个字母(不仅是名字中的连续... ...);
- 必须接受减号( - )和撇号(') - 这些是唯一可以使用的特殊字符 ...(不是强制性的,也不在名称中)。
到目前为止,我有这段代码:
"/^[a-zA-Z]{3}+['-]+$/"
但仅接受three consucutive letters
和连续'-
谢谢!
编辑解决 tommoyang
答案 0 :(得分:2)
我认为你不能在一个回合中有效地做到这一点。
但类似的东西应该有效:
if (
preg_match("/^[a-z][a-z'-]{3,}$/i",$subject) &&
strlen(preg_replace('/[\W_]/','',$subject))>=3
){
...
或者速度较慢但只有正则表达式的解决方案:
"/^([a-z][a-z'-]*?){3,}$/i"
答案 1 :(得分:1)
/^([A-Za-z][A-Za-z'-]*?){3,}$/
主体指定任何Alpha字符,后跟任何数字(包括0)以下字符。这是不合适的,所以你可以重复3次以达到3个Alpha字符的要求,然后是最后的
[A-Za-z'-]*?
块将抓住其他所有内容。
答案 2 :(得分:0)
这样的事情应该做:
'/^[a-zA-Z].*[a-zA-Z].*[a-zA-Z]/'
请注意单引号,否则您的终端$
将被解释......但无论如何都不需要...