Php preg_不匹配两个或多个hypen和撇号字符的序列
我需要进行名称验证。名称仅由字母(A-z和A-z)、连字符、撇号和空格组成;不包含两个或两个以上字符的序列连字符和撇号;以一封信开头。如果这些约束得到满足,那么我们称之为valid。 到目前为止,我已经做到了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]+[-' ]?)+$/ 说明: /
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}
表示任何语言中的任何字母
总之,我建议您阅读以下内容: