2013-03-11 144 views
3

我使用PHP验证我的联系表,我用下面的代码:过PHP字母和空格只验证

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

此代码工作正常,但它证明了,不允许空格。我试过ctype_alpha_s,并提出了一个致命的错误。

任何帮助,将不胜感激

+0

连字符和单引号/反引号怎么样?这些名称也是有效的字符。 – Eric 2013-03-11 18:56:55

+0

“John O'Reily”或“BjörkGuðmundsdóttir”或“A'ishah-Yunus”如何? – 2013-03-11 19:18:30

回答

15

正则表达式是矫枉过正而对于这样一个简单的任务会表现更差,可以考虑使用本地字符串函数:在运行阿尔法检查前

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

这将去掉空格。如果你想使用它你的目的

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

而ctype_alpha只为字母[A-Za-z]

检查,第一ü将不得不删除:如果选项卡和新线是一个问题,你可以考虑用这个代替您的字符串中的空格,然后应用ctype_alpha。

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

if (!preg_match ("/^[a-zA-Z\s]+$/",$name)) { 
    $errors[] = "Name must only contain letters!"; 
} 
1
if (ctype_alpha(str_replace(' ', '', $name)) === false) { 
    $errors[] = 'Name must contain letters and spaces only'; 
} 
+0

欢迎来到Stack Overflow!尽管这段代码可以解决这个问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – JonasCz 2016-06-06 12:36:10

0

一为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字符

为在上述安东尼HATZOPOULOS评论指出这也将匹配像比约克Guðmundsdóttir名。

相关问题