PHP只验证字母和空格


PHP letters and spaces only validation

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

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

这段代码工作得很好,但是它过度验证并且不允许空格。我试过ctype_alpha_s,出现了一个致命的错误。

如有任何帮助,不胜感激

Regex是多余的,对于这样一个简单的任务会表现得更差,考虑使用本地字符串函数:

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

这将在运行alpha检查之前删除空格。如果制表符和换行是一个问题,你可以考虑使用这个:

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

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

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

但是我会使用preg_match来检查验证。你可以这样做。

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

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

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

解释:

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

这也将匹配像Björk Guðmundsdóttir这样的名字,正如Anthony Hatzopoulos在上面的评论中所指出的。

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