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

时间:2016-06-04 14:48:56

标签: php regex validation

我想检查名称是否与regex PHP有效,但我需要一个允许的唯一正则表达式:

  • 字母(大写和小写)
  • 空格(最多2个)

但是空间不可能是一个空间。 例如: 名称 - > Dennis Unge Shishic(有效) 名称 - >丹尼斯(空间)(空间)(无效)

希望你们了解我,谢谢你们。)

4 个答案:

答案 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 - 字符串结束,甚至不允许美元锚点允许的尾随换行符。