我想检查名称是否与regex PHP有效,但我需要一个允许的唯一正则表达式:
但是空间不可能是一个空间。 例如: 名称 - > Dennis Unge Shishic(有效) 名称 - >丹尼斯(空间)(空间)(无效)
希望你们了解我,谢谢你们。)
答案 0 :(得分:3)
首先,值得一提的是,对人名的限制性规则是a very bad idea。但是,如果必须,像这样的简单字符类将限制为大写和小写英文字母:
[A-Za-z]
要匹配一个或多个,您需要在其后添加+
。因此,这将匹配名称的第一部分:
[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]+){1,2}
答案 1 :(得分:0)
为了使生成的代码易于理解和维护,您可以使用两个Regex。一个检查(通过要求它是真的)只使用允许的字符^[a-zA-Z ]+$
然后另一个,检查(通过要求它是假的)没有两个(或更多)相邻的空格{{1 }}
答案 2 :(得分:0)
请尝试以下工作代码:
将输入更改为您要测试的任何内容,并查看打印的正确验证结果
<?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";
}
?>
答案 3 :(得分:0)
PHP中仅包含Unicode字母的一到三个单词的正则表达式就像
/^\p{L}+(?:\h\p{L}+){1,2}\z/u
说明
^
- 字符串开始\p{L}+
- 一个或多个Unicode字母(?:\h\p{L}+){1,2}
- 一个或两个水平空格序列,后跟一个或多个Unicode字母\z
- 字符串结束,甚至不允许美元锚点允许的尾随换行符。