Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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中以字母开头和结尾?_Php_Regex - Fatal编程技术网

如何验证名称字段,使其只允许一个空格,并在PHP中以字母开头和结尾?

如何验证名称字段,使其只允许一个空格,并在PHP中以字母开头和结尾?,php,regex,Php,Regex,我正在寻找一个PHP中的正则表达式,它可以为我执行以下操作: 我有一个人的名字字段。我希望允许此人在“名字”字段中实际输入两个名字。每个名称必须以大写字母开头,以字母结尾,必要时可以包含单引号或破折号。名称之间允许有一个空格。可接受以下名称: 史蒂文·奥莱利 詹姆斯·迪恩·彼得森 詹姆斯·迪恩·彼得森 詹姆斯·迪恩·彼得森 “名字”字段中不需要两个名字,但允许使用。这是我一直在玩的一个正则表达式: if(!preg_match('/^[A-Z][a-z-]+[a-z]+([\s][A-Z][a-

我正在寻找一个PHP中的正则表达式,它可以为我执行以下操作:

我有一个人的名字字段。我希望允许此人在“名字”字段中实际输入两个名字。每个名称必须以大写字母开头,以字母结尾,必要时可以包含单引号或破折号。名称之间允许有一个空格。可接受以下名称:

史蒂文·奥莱利
詹姆斯·迪恩·彼得森
詹姆斯·迪恩·彼得森
詹姆斯·迪恩·彼得森

“名字”字段中不需要两个名字,但允许使用。这是我一直在玩的一个正则表达式:

if(!preg_match('/^[A-Z][a-z-]+[a-z]+([\s][A-Z][a-z-]+[a-z])?$/', $fname))
这允许我在字段中有两个名称,以大写字母开头,以小写字母结尾。它还允许我有一个破折号(-),但我不能让它允许一个引号(')。它还允许在名称末尾使用多个空格,前提是没有其他字母。我可以用trim()函数消除它,所以没什么大不了的,但如果我能用正则表达式使它无效,那就太好了


不管怎样,有谁能提供一个允许单引号的正则表达式,并且在最后一个字母后不允许有空格吗?

尽管完全的正则表达式验证是可能的,但这样做对您来说是痛苦的,对您可怜的用户来说也是麻烦的。例如,您可能会得到所有大写字母的名称。我总是喜欢将用户名按原样保存在db中,并在输出时按我想要的方式格式化。在您的情况下,它可能会如下所示:

$name = 'john doe';

$fullname = htmlspecialchars(trim(explode(" ", $name), ENT_QUOTES));

$firstName = ucfirst($fullname[0]);
$lastName  = ucfirst($fullname[1]);
这只是我将如何处理这个问题的一个模糊想法

要使用正则表达式修剪字符串,这也可能对您有所帮助:

  //Trim whitespace (including line breaks) at the start and the end of the string
  preg_replace("\A\s+|\s+\z", "", $text);
对于您的引号,假设您希望同时允许单引号或双引号,此块['“]匹配引号将其添加到正则表达式中,以便仅在第二个字母后的任何位置匹配一次,例如
示例。

对于可能遇到此问题的任何人,我发现了我的问题。正则表达式可以使用,但需要几个附加字符

if(!preg_match('/^[A-Z][a-z-\']+[a-z]+([\s][A-Z][a-z-\']+[a-z])?$/', $fname))

我没有做的一件事是在检查$fname变量之前去掉斜杠。因此,只需对变量使用stripslashes()函数,然后对此进行检查。要消除额外的空格(如果有),只需使用trim()。很简单。

虽然可能,但这样做对你的可怜用户来说是非常麻烦的。例如,你可能会得到所有大写字母的名称。但是鉴于当前的正则表达式,他们无法输入所有大写字母的名称。该网站还提供了关于哪些内容可以输入,哪些内容不能输入的详细信息。我相信人们知道如何正确拼写自己的名称。我gree with stefgosselin-真的没有理由在一个名字上做这个详细的正则表达式-你几乎肯定会遇到一个不会验证这个比较的人,而且..你让他们大写了???这就是PHP的作用。非常感谢。我没有考虑过这样的方法。我感谢你的回答。