PHP正则表达式来检查英文名称

PHP正则表达式来检查英文名称,php,regex,Php,Regex,正在查找正则表达式以检查有效的英文名称,例如: A-Z,A-Z,仅限空格 名字,(可选)中间名、姓氏 一个可接受的例子:johnvonneumann 谢谢 编辑(添加检查代码): #/usr/bin/php 你的名字会因为奥尼尔的名字而落空。还有韦伯·史密斯等人 使用@Amber的已修改版本: /(?:[A-Za-z.-]+\s*){2,3}/你的名字将不适用于那里的奥尼尔。还有韦伯·史密斯等人 使用@Amber的已修改版本: /(?:[A-Za-z.-]+\s*){2,3}/您可以尝试:

正在查找正则表达式以检查有效的英文名称,例如:

  • A-Z,A-Z,
    仅限空格
  • 名字,(可选)中间名、姓氏
一个可接受的例子:
johnvonneumann

谢谢

编辑(添加检查代码):

#/usr/bin/php

你的名字会因为奥尼尔的名字而落空。还有韦伯·史密斯等人

使用@Amber的已修改版本:


/(?:[A-Za-z.-]+\s*){2,3}/

你的名字将不适用于那里的奥尼尔。还有韦伯·史密斯等人

使用@Amber的已修改版本:

/(?:[A-Za-z.-]+\s*){2,3}/

您可以尝试:

if(preg_match('/^([a-z]+ ){1,2}[a-z]+$/i',trim($input))) {
  // valid full name.
}
正如其他人所指出的,它将不允许在名称中使用标点符号

您可以尝试:

if(preg_match('/^([a-z]+ ){1,2}[a-z]+$/i',trim($input))) {
  // valid full name.
}

正如其他人所指出的,它将不允许在名称中使用标点符号

如果您所陈述的规则实际上是您想要的,那么以下规则将起作用:

/^(?:[A-Za-z]+(?:\s+|$)){2,3}$/
然而,有相当多的真实姓名不符合这些规则,如“O'Malley”、“Jo-Jo”等


当然,您可以相当容易地扩展这个正则表达式以允许使用其他字符-只需将它们添加到括号中即可。例如,要允许撇号和破折号,您可以使用
[A-Za-z'-]
-
必须在末尾,否则将被解释为一个范围)。

如果您所述的规则实际上是您想要的,那么以下规则将起作用:

/^(?:[A-Za-z]+(?:\s+|$)){2,3}$/
然而,有相当多的真实姓名不符合这些规则,如“O'Malley”、“Jo-Jo”等



当然,您可以相当容易地扩展这个正则表达式以允许使用其他字符-只需将它们添加到括号中即可。例如,要允许撇号和破折号,可以使用
[A-Za-z'-]
-
必须在末尾,否则将被解释为一个范围)。

这是个坏主意。人们的名字中可能有各种标点符号,如破折号和撇号。他们也可能有重音或外国字母。此外,中间名的数量可能会有很大差异。

这是个坏主意。人们的名字中可能有各种标点符号,如破折号和撇号。他们也可能有重音或外国字母。此外,中间名的数量可能会有很大差异。

在您的规范之外,还有更多的名称是可以接受的,您确定这些规则就是您想要的吗?例如,“约翰·奥马利”或类似的名字呢?Amber说了什么,加上连字符的名字。:-)(比如说我,谁有这样一个名字。:-P)我可怜的朋友BöB呢。@Artefactor我尝试[\w]+但没有运气。@Amber@Chris Jester Young可以放心地忽略不计。在我的例子中,我正在检查一个中文名字的英文名字,它通常不包含\'或欧洲字符。我只是想确保用户不会在英文名称字段中填写中文名称。在您的规范之外,还有更多可以接受的名称,您确定这些规则是您想要的吗?例如,“约翰·奥马利”或类似的名字呢?Amber说了什么,加上连字符的名字。:-)(比如说我,谁有这样一个名字。:-P)我可怜的朋友BöB呢。@Artefactor我尝试[\w]+但没有运气。@Amber@Chris Jester Young可以放心地忽略不计。在我的例子中,我正在检查一个中文名字的英文名字,它通常不包含\'或欧洲字符。我只是想确保用户不会在英文姓名字段中填写中文姓名。那么所有O’;全世界的尼尔?伙计!这是一个等待发生的XSS。那么所有的O’;全世界的尼尔?伙计!这是一个等待发生的XSS。这将在任何长度超过单个字符的名称上失败,因为它没有可变长度说明符(
*
+
)。事实上,这是一个可怕的解决方案,因为它甚至不会处理Sam这样的驼峰式名称。@hopeseekr:你怎么认为它不会呢?呸,我看到了/i。老兄,为什么要这样?我可能不是唯一一个做出这种错误假设的人。这在任何超过单个字符的名称上都会失败,因为它没有可变长度说明符(
*
+
)。实际上,这是一个可怕的解决方案,因为它甚至不会处理像山姆这样的骆驼壳名字。@hopeseker:你怎么会认为它不会呢?呸,我看到了/i。老兄,为什么要这样?我可能不是唯一一个做出错误假设的人。+1:为OP需求规则提供工作正则表达式。如果您添加规则以允许像Teal'c Malquet、Jack O'Neill和Jennifer McKay Keller这样的名字;-)@Amber谢谢!似乎ReGEX允许一个字符串(例如,代码>约翰< /代码>被认为是OK)。我想强制检查名字和姓氏(即两个由空格分隔的字符串)。@Amber-似乎正则表达式允许由四部分组成的字符串,例如:
first Middle last 4th
,这是不允许的。可接受的字符串应该是两个或三个部分。它不应该。。。分组只允许一组连续的字母(在
[A-Za-z]+
部分中),并且该部分最多只能重复3次(
{2,3}
=2到3)。+1:为OP需求规则提供工作正则表达式。如果添加规则以允许像Teal'c Malquet、Jack O'Neill和Jennifer McKay Keller这样的名称;-)@Amber谢谢!似乎ReGEX允许一个字符串(例如,代码>约翰< /代码>被认为是OK)。我想强制检查名字和姓氏(即两个由空格分隔的字符串)。@Amber-似乎正则表达式允许由四部分组成的字符串,例如:
first Middle last 4th
,这是不允许的。可接受的字符串应该是两个或三个部分。它不应该。。。分组只允许一组连续的字母(在
[A-Za-z]+
部分中),该部分最多只能重复3次(
{2,3}
=2到3)。请关注此问题的要求,而不是En的定义