我需要进行名称验证。名称只包含字母(a-z和A-Z),连字符,撇号和空格;不包含两个或多个字符连字符和撇号的序列;并以一封信开头。如果满足这些约束,那么我们称该名称有效。 到目前为止我已经完成了
if(preg_match("/[^a-zA-Z'-]+/",$testname)) ...
但我不知道如何禁止两个或多个字符连字符和撇号,并使其仅以字母开头。任何帮助将不胜感激!
答案 0 :(得分:0)
这个符合您的需求:
/^(?:[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}
代表任何语言的任何字母
好的我建议您阅读:https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/