Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_不匹配两个或多个hypen和撇号字符的序列_Php_Regex_Preg Match - Fatal编程技术网

Php preg_不匹配两个或多个hypen和撇号字符的序列

Php preg_不匹配两个或多个hypen和撇号字符的序列,php,regex,preg-match,Php,Regex,Preg Match,我需要进行名称验证。名称仅由字母(A-z和A-z)、连字符、撇号和空格组成;不包含两个或两个以上字符的序列连字符和撇号;以一封信开头。如果这些约束得到满足,那么我们称之为valid。 到目前为止,我已经做到了 if(preg_match("/[^a-zA-Z'-]+/",$testname)) ... 但我不知道如何禁止两个或两个以上的连字符和撇号,并使其仅以字母开头。任何帮助都将不胜感激 这一款满足您的需求: /^(?:[a-z]+[-' ]?)+$/ 说明: /

我需要进行名称验证。名称仅由字母(A-z和A-z)、连字符、撇号和空格组成;不包含两个或两个以上字符的序列连字符和撇号;以一封信开头。如果这些约束得到满足,那么我们称之为valid。 到目前为止,我已经做到了

 if(preg_match("/[^a-zA-Z'-]+/",$testname)) ... 

但我不知道如何禁止两个或两个以上的连字符和撇号,并使其仅以字母开头。任何帮助都将不胜感激

这一款满足您的需求:

/^(?:[a-z]+[-' ]?)+$/
说明:

/               : regex delimiter
  ^             : begining of string
    (?:         : start non capture group
      [a-z]+    : 1 or more letter
      [-' ]?    : optionaly 1 of these characters, hyphen or apostrophe or space
    )+          : end group, 1 or more times
  $             : end of string
/i              : regex delimiter + modifier case insensitive
如果您希望名称以字母结尾:

/^(?:[a-z]+[-' ]?)+[a-z]$/i
如果要匹配任何语言的名称:

/^(?:\p{L}+[-' ]?)+\p{L}$/
其中,
\p{L}
表示任何语言中的任何字母

总之,我建议您阅读以下内容: