Php 用于名称验证的唯一正则表达式
我想检查名称是否对regex PHP有效,但我需要一个唯一的regex,它允许:Php 用于名称验证的唯一正则表达式,php,regex,validation,Php,Regex,Validation,我想检查名称是否对regex PHP有效,但我需要一个唯一的regex,它允许: 字母(大写和小写) 空间(最多2个) 但是不可能有一个接一个的空间。。 例如: 姓名->Dennis Unge Shishic(有效) 姓名->丹尼斯(空格)(空格)(无效) 希望你们理解我,谢谢:)为了使生成的代码易于理解和维护,您可以使用两个正则表达式。一个检查(通过要求它为true)只使用允许的字符^[a-zA-Z]+$,然后另一个检查(通过要求它为false)不存在两个(或更多)相邻的空格(){2,}。
- 字母(大写和小写)
- 空间(最多2个)
希望你们理解我,谢谢:)为了使生成的代码易于理解和维护,您可以使用两个正则表达式。一个检查(通过要求它为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
说明:
-字符串开始^
-一个或多个Unicode字母\p{L}+
-一个或两个水平空格序列,后跟一个或多个Unicode字母(?:\h\p{L}+{1,2}
-字符串结尾,甚至不允许美元锚允许的尾随换行符\z
[A-Za-z]*([A-Za-z]+)?([A-Za-z]+)?
在这里可能更合适..因为如果开始时有空格,您的正则表达式将不匹配..@rock321987根据问题的措辞,我假设,开头的空格无效。是的..如果最后有空格,我建议的内容将不匹配..无论如何,我认为你的假设是正确的很难解释我想要什么..我希望它即使有1或2个空格也是有效的.名称可以包含名字和姓氏,也可以包含名字-中间名-姓氏。。所以必须有1或2个空格,不能多,也不能少..而且不能先键入空格,或者在空格后键入空格(名称后是2个空格)…好的。我已经更新了我的答案,以反映需求名称->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克约翰笈多”->“阿披舍克笈多”->“阿披舍克笈多”->“阿披舍克约翰笈多”->有效(应该)