正则表达式中的名字和姓氏

时间:2014-07-11 10:04:12

标签: php regex

我需要一个正则表达式来验证第一个和最后一个名字是否为核心提供。那么这就是我想出来的:

preg_match('/^[\p{L}]{4,25}[\s][\p{L}]{4,25}$/u', Form::post('name'))

如果字符串包含:

,则此工作正常
  • word (4-25 chars long and utf8 chars allowed)
  • space
  • word (4-25 chars long and utf8 chars allowed)

相当不错,但对我的剧本来说似乎太复杂了 有没有办法转换该正则表达式,以便它将满足相同的条件,但有一些“全局”字符范围,如下所示:

  • (word space word){8,50}

也可以选择它可以有第二个空格和第三个字以防一些外国人想要使用我的网站

任何帮助都会受到关注:)

1 个答案:

答案 0 :(得分:1)

除了名称验证本身是一个坏主意(参见Falsehoods programmers believe about names)之外,你的正则表达式可以在语法上简化为

/^\pL{4,25}\s\pL{4,25}$/u
是的,这是可能的,但很难看。您需要使用positive lookahead assertion来确保只有一个空格,并且它既不在字符串的结尾也不在字符串的开头:

/^(?=\S+\s\S+$)[\pL\s]{8,50}$/u

如果您想允许更多空格/单词,可以使用

/^(?=\S+(?:\s\S+)+$)[\pL\s]{8,50}$/u