仅PHP字母和空格验证

仅PHP字母和空格验证,php,forms,validation,Php,Forms,Validation,我正在使用PHP验证我的联系人表单,并使用了以下代码: if (ctype_alpha($name) === false) { $errors[] = 'Name must only contain letters!'; } 这段代码可以正常工作,但它会过度验证,不允许使用空格。我尝试了ctype\u alpha\u s,结果出现了一个致命错误 >任何帮助都将非常感谢 ReEX是过度的,并且对于这样一个简单的任务来说会更糟,考虑使用本机字符串函数: if (ctype

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

if (ctype_alpha($name) === false) {
            $errors[] = 'Name must only contain letters!';
}
这段代码可以正常工作,但它会过度验证,不允许使用空格。我尝试了
ctype\u alpha\u s
,结果出现了一个致命错误


<> >任何帮助都将非常感谢

ReEX是过度的,并且对于这样一个简单的任务来说会更糟,考虑使用本机字符串函数:

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}=>后面的空格与空格匹配
  • +=>量词-一到无限次之间的匹配(贪婪)
  • /u=>Unicode修饰符。模式字符串被视为UTF-16。阿尔索 使转义序列与unicode字符匹配

正如安东尼·哈佐普洛斯(Anthony Hatzopoulos)在上述评论中指出的那样,这也将与比约克·古蒙德蒂尔(Björk Guðmundsdóttir)等名字相匹配。

连字符和单引号/反勾如何。这些都是名称中的有效字符。那么
John O'Reily
Björk Guðmundsdóttir
A'ishah-Yunus
欢迎使用堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
if (!preg_match('/^[\p{L} ]+$/u', $name)){
  $errors[] = 'Name must contain letters and spaces only!';
}