我知道还有其他方法可以做到这一点,但我正在使用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函数的正确语法,我将覆盖我的撇号?
真正感谢帮助人员。你是非常宝贵的,我努力不要滥用它。
答案 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;
}