Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用ctype_alpha时是否允许撇号?_Php_Validation - Fatal编程技术网

Php 使用ctype_alpha时是否允许撇号?

Php 使用ctype_alpha时是否允许撇号?,php,validation,Php,Validation,我知道还有其他方法可以做到这一点,但我正在尝试使用ctype_alpha验证名称字段,但允许使用空格、连字符和撇号 根据Stack上的另一篇文章,我可以添加空格,没有问题,但我认为替换多个字符的语法是错误的 到目前为止,我使用了什么来验证只允许使用字母和空格: if (ctype_alpha(str_replace(' ', '', $name)) === false) { echo'Name must contain letters and spaces only'; exit

我知道还有其他方法可以做到这一点,但我正在尝试使用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;
}
这将在检查字符串是否仅为字母之前删除所有空格。我只是想简单地添加到这一点,也允许连字符和撇号

我尝试添加连字符和/或撇号(无效):

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新手,我很难弄清楚如何对搜索进行词组化以找到正确的语法

另外,一旦我找到str_replace函数的正确语法,“\w”将覆盖我的撇号,我这样说对吗


真诚地感谢你们的帮助。你们都是无价之宝,我努力不滥用它

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

带撇号

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

对于撇号,即单引号字符,使用“\w”是不可行的。根据:

\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);

这绝对适用于添加连字符,但我假设不能在其中添加撇号。我在另一篇文章中尝试了“\w”和“\w+”,但这两种方法似乎都不能正常工作。换句话说,我尝试了:if(ctype_alpha(str_replace(array('''.\w+','-'),'.$name))==false){echo'名称必须只包含字母和空格';exit;}。。。还有几个其他的“\w+”变体。@sforcash撇号加上