Php 用于名称验证的唯一正则表达式

Php 用于名称验证的唯一正则表达式,php,regex,validation,Php,Regex,Validation,我想检查名称是否对regex PHP有效,但我需要一个唯一的regex,它允许: 字母(大写和小写) 空间(最多2个) 但是不可能有一个接一个的空间。。 例如: 姓名->Dennis Unge Shishic(有效) 姓名->丹尼斯(空格)(空格)(无效) 希望你们理解我,谢谢:)为了使生成的代码易于理解和维护,您可以使用两个正则表达式。一个检查(通过要求它为true)只使用允许的字符^[a-zA-Z]+$,然后另一个检查(通过要求它为false)不存在两个(或更多)相邻的空格(){2,}。

我想检查名称是否对regex PHP有效,但我需要一个唯一的regex,它允许:

  • 字母(大写和小写)
  • 空间(最多2个)
但是不可能有一个接一个的空间。。 例如: 姓名->Dennis Unge Shishic(有效) 姓名->丹尼斯(空格)(空格)(无效)


希望你们理解我,谢谢:)

为了使生成的代码易于理解和维护,您可以使用两个正则表达式。一个检查(通过要求它为true)只使用允许的字符
^[a-zA-Z]+$
,然后另一个检查(通过要求它为false)不存在两个(或更多)相邻的空格
(){2,}

。首先,值得一提的是,对人名有这样的限制性规则是非常重要的。但是,如果必须这样做,像这样的简单字符类将限制您仅使用大写和小写英文字母:

[A-Za-z]
要匹配一个或多个,您需要在其后面添加一个
+
。因此,这将匹配名称的第一部分:

[A-Za-z]+
要捕获第二个名称,只需执行前面带有空格的相同操作,因此类似这样的操作将捕获两个名称:

[A-Za-z]+ [A-Za-z]+
要使第二个名称成为可选名称,需要用括号将其括起来,并在其后面添加一个
,如下所示:

[A-Za-z]+( [A-Za-z]+)?
[A-Za-z]+( [A-Za-z]+){1,2}
要添加第三个名称,只需再次添加:

[A-Za-z]+( [A-Za-z]+)? [A-Za-z]+
或者,您可以指定后面的名称可以重复1到2次,如下所示:

[A-Za-z]+( [A-Za-z]+)?
[A-Za-z]+( [A-Za-z]+){1,2}

尝试以下工作代码:
将输入更改为您想要测试的内容,并查看打印的正确验证结果

<?php

$input_line = "Abhishek  Gupta";
preg_match("/[a-zA-Z ]+/", $input_line, $nameMatch);
preg_match("/\s{2,}/", $input_line, $multiSpace);

var_dump($nameMatch);
var_dump($multiSpace);

if(count($nameMatch)>0){

   if(count($multiSpace)>0){
    echo "Invalid Name Multispace";
    }
    else{
    echo "Valid Name";
    }
}
else{
echo "Invalid Name";
}

?>

在PHP中,一到三个单词的正则表达式仅由Unicode字母组成

/^\p{L}+(?:\h\p{L}+){1,2}\z/u
说明:

  • ^
    -字符串开始
  • \p{L}+
    -一个或多个Unicode字母
  • (?:\h\p{L}+{1,2}
    -一个或两个水平空格序列,后跟一个或多个Unicode字母
  • \z
    -字符串结尾,甚至不允许美元锚允许的尾随换行符

请发布您的尝试您尝试过什么了吗<代码>^[a-zA-Z]+\s[a-zA-Z]+(\s[a-zA-Z])?$可能是名字本身有效还是名字本身有效?我没有尝试任何正则表达式,因为我找不到任何东西..你能提供更多关于什么是有效的和无效的例子吗?可以有名字和姓氏,但是它也可以是名字-中间名-姓氏..因此两者都可以有效..并且只能有1或2个空格(不能多或少)。。例如:John Smith(有效)(包含1个空格)John Deny Smith(有效)(包含2个空格)使用
[A-Za-z]*([A-Za-z]+)?([A-Za-z]+)?
在这里可能更合适..因为如果开始时有空格,您的正则表达式将不匹配..@rock321987根据问题的措辞,我假设,开头的空格无效。是的..如果最后有空格,我建议的内容将不匹配..无论如何,我认为你的假设是正确的很难解释我想要什么..我希望它即使有1或2个空格也是有效的.名称可以包含名字和姓氏,也可以包含名字-中间名-姓氏。。所以必须有1或2个空格,不能多,也不能少..而且不能先键入空格,或者在空格后键入空格(名称后是2个空格)…好的。我已经更新了我的答案,以反映需求名称->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克约翰笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克约翰笈多”->有效(应该)