Preg_match至少3个字母和减号和撇号

时间:2014-02-12 09:14:35

标签: php regex

我需要一个名称验证的正则表达式。规则是:

- 必须以字母开头;

- 必须至少有三个字母(不仅是名字中的连续... ...);

- 必须接受减号( - )和撇号(') - 这些是唯一可以使用的特殊字符 ...(不是强制性的,也不在名称中)。

到目前为止,我有这段代码:

"/^[a-zA-Z]{3}+['-]+$/"

但仅接受three consucutive letters和连续'-

谢谢!


编辑解决 tommoyang

3 个答案:

答案 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]/'

请注意单引号,否则您的终端$将被解释......但无论如何都不需要...