PHP字母和空格仅验证

时间:2013-03-11 18:52:21

标签: php forms validation

我正在使用PHP验证我的联系表单,我使用了以下代码:

if (ctype_alpha($name) === false) {
            $errors[] = 'Name must only contain letters!';
}

此代码工作正常,但它过度验证并且不允许空格。我已经尝试了ctype_alpha_s并且出现了致命的错误。

非常感谢任何帮助

4 个答案:

答案 0 :(得分:20)

正则表达式过度,对于这么简单的任务会表现更差,请考虑使用本机字符串函数:

if (ctype_alpha(str_replace(' ', '', $name)) === false) {
  $errors[] = 'Name must contain letters and spaces only';
}

这将在运行alpha检查之前删除空格。如果选项卡和新行是个问题,您可以考虑使用它:

str_replace(array("\n", "\t", ' '), '', $name);

答案 1 :(得分:5)

ctype_alpha仅检查字母[A-Za-z]

如果您想将它用于您的目的,首先您必须从字符串中删除空格,然后应用ctype_alpha。

但我会去preg_match检查验证。你可以这样做。

if ( !preg_match ("/^[a-zA-Z\s]+$/",$name)) {
   $errors[] = "Name must only contain letters!";
} 

答案 2 :(得分:1)

if (ctype_alpha(str_replace(' ', '', $name)) === false)  {
  $errors[] = 'Name must contain letters and spaces only';
}

答案 3 :(得分:1)

一个UTF-8世界,它将匹配任何语言的空格和字母。

if (!preg_match('/^[\p{L} ]+$/u', $name)){
  $errors[] = 'Name must contain letters and spaces only!';
}

说明:

  • [] =>字符类定义
  • p {L} =>匹配任何语言的任何字母字符
  • p {L} =>之后的空格匹配空格
  • + =>量词 - 在一到无限次之间匹配(贪婪)
  • / u => Unicode修饰符。模式字符串被视为UTF-16。也 导致转义序列匹配unicode字符

这也会与BjörkGuðmundsdóttir这样的名字相匹配,正如Anthony Hatzopoulos在上面的评论中所述。