使用ctype_alpha时允许撇号?

时间:2017-05-15 23:07:50

标签: php validation

我知道还有其他方法可以做到这一点,但我正在使用ctype_alpha验证名称字段,但允许使用空格,连字符和撇号。

在Stack上的另一篇文章中,我能够添加空格没有问题,但我认为我的语法错误,无法替换多个字符。

到目前为止我使用的是用于验证只允许使用字母和空格的内容:

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

在检查字符串是否仅为字母之前,这将删除所有空格。我希望简单地添加到这个也允许连字符和撇号。

我尝试添加连字符和/或撇号(不起作用):

if (ctype_alpha(str_replace(' ', '', '-', '', $name)) === false) {
    echo'Name must contain letters and spaces only';
    exit;
}

我的猜测是在str_replace函数中添加第二个字符串不是正确的语法,但作为一个PHP新手,我很难弄清楚如何用短语来查找正确的语法。

另外,我说的是' \ w'一旦我找到str_replace函数的正确语法,我将覆盖我的撇号?

真正感谢帮助人员。你是非常宝贵的,我努力不要滥用它。

2 个答案:

答案 0 :(得分:3)

使用'\ w'对于撇号是不可行的,即单引号字符。根据{{​​3}}:

  

\ w任何单词字符(字母,数字,下划线)

对于OP代码中的语法,主要问题是需要为str_replace()的第一个参数设置一个字符数组才能替换多个字符。

除了用双引号("'")括起单引号外,PHP还允许使用反斜杠转义单引号字符,然后将其用单引号括起来,如下面的代码段所示:

<?php

$name = "Kate O'Henry-Smith";
$arrDelChars = [' ','\'','-'];

if ( ctype_alpha( str_replace( $arrDelChars, '', $name ) ) === false ) {
    exit( "Name must contain letters and spaces only\n" );
}

print_r($name);

请参阅manual

str_replace()根据要排除的值数组,用空字符串替换$ name中的每个字符。注意,指定数组中的空字符串是不必要的,因为替换值是空字符串。出现的新字符串成为ctype_alpha()的实际参数,而不是$ name。因此该函数返回true。因此,if条件评估为false,从而防止显示错误消息。允许ctype_alpha()验证$ name的可爱技巧。

答案 1 :(得分:2)

正确的语法,如manual中所述:

if (ctype_alpha(str_replace(array(' ', '', '-'), '', $name)) === false) {
    echo'Name must contain letters and spaces only';
    exit;
}

使用撇号

if (ctype_alpha(str_replace(array(' ', '', '-',"'"), '', $name)) === false) {
    echo'Name must contain letters and spaces only';
    exit;
}