Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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中验证带有空格的字母字符串的有效性?_Php_Regex - Fatal编程技术网

如何在PHP中验证带有空格的字母字符串的有效性?

如何在PHP中验证带有空格的字母字符串的有效性?,php,regex,Php,Regex,我知道有函数ctype_alpha,但当字符串包含空格(空格字符)时,该函数将返回FALSE 如何允许字母字符和空格,而不允许其他字符 if (preg_match("^/[a-zA-Z ]+$/", $input)) { // input matches } 演示: 文档:ctype_alpha(preg_replace('/\s/',''$mystring)) 内部表达式返回不带空格的字符串,然后根据需要使用ctype_alpha`` $is_alpha_space = ctype

我知道有函数
ctype_alpha
,但当字符串包含空格(空格字符)时,该函数将返回
FALSE

如何允许字母字符和空格,而不允许其他字符

if (preg_match("^/[a-zA-Z ]+$/", $input)) {
    // input matches
}
演示:
文档:

ctype_alpha(preg_replace('/\s/',''$mystring))

内部表达式返回不带空格的字符串,然后根据需要使用ctype_alpha``

$is_alpha_space = ctype_alpha(str_replace(' ', '', $input)));


删除空格是一个不错的选择,但请记住,现在ctype_alpha会导致空字符串出现false!下面是我使用的方法

function validateAlpha($valueToValidate, $spaceAllowed = false) {
    if ($spaceAllowed) {
        $valueToValidate = str_replace(' ', '', $valueToValidate);
    }
    if (strlen($valueToValidate) == 0) {
        return true;
    }
    return ctype_alpha($valueToValidate);
}

我将使用一个简单的正则表达式和php函数,如下所示:

if(preg_match("/^[a-zA-Z ]+$/", $varToCheck)){
  //your code here
}
这里重要的部分是识别所需部分的正则表达式,在我的例子中,我希望名称字段使用文本,并使用类似于此处的空格。[a-z]是从a到z的范围,a-z是从a到z的范围,末尾的“”表示空格


希望这对其他人有所帮助。

在检查之前用数字替换空格?@DanRedux只有在字符串事先不包含数字时才有效。为什么?如果它事先包含数字,它将正确返回false。如果它包含后面的数字,它将正确返回false。。它唯一能做的就是把空格当作坏记号,把它们变成坏记号。@DanRedux你误读了这个问题。OP想要接受包含空格的字符串;
ctype_alpha
的问题在于它没有。然后将空格改为字母“a”:p尽管要知道,
[a-z]
可以。正则表达式中有输入错误。它应该以
/^
开头,而不是以
^/
开头。请注意,此正则表达式将允许只包含空格的字符串。这可能是也可能不是期望的结果。非常感谢。我喜欢第一个。我只是想了解一下,你是怎么知道第一个的?因为我甚至不能从文档中看出,这不是一个函数。它使用
str_replace()
删除空格,然后
ctype_alpha()
检查结果是否按字母顺序排列。我确实理解,尽管您是如何知道的,但文档中的ctype页面没有指出它(您可以这样做),或者是这样做的?我不知道,你必须考虑你想要完成什么,有时你必须分步完成。你会问自己,“如果
ctype\u alpha
不允许使用空格,我能做些什么?”答案是,你可以在将空格传递给
ctype\u alpha
之前删除空格,所以你可以去寻找可以做到这一点的东西。如果查看手动输入的
str_replace
的返回值部分,您会看到它返回一个包含替换值的字符串。因此,您可以将
str\u replace
的返回值传递给
ctype\u alpha
。函数名通常是自解释的。在每页的侧边栏中都有该部分的所有函数列表,在另见部分中也有相关函数列表。另外,大多数页面都有用户贡献的代码和帮助。这属于“如果您不需要花哨的替换规则”的类别,您应该始终使用
str\u replace
,而不是
preg\u replace
if(preg_match("/^[a-zA-Z ]+$/", $varToCheck)){
  //your code here
}