2012-04-22 62 views
5

我知道有函数ctype_alpha,虽然这个函数在字符串中包含空格(空白字符)时会返回FALSE如何验证在PHP中只包含空格的字符串?

我该如何允许字母和空格,但没有别的?

+0

检查前用空格替换空格吗? – DanRedux 2012-04-22 04:59:16

+0

@DanRedux仅在字符串事先不包含数字时才有效。 – 2012-04-22 05:01:20

+0

为什么?如果它事先包含数字,它将正确返回false。如果它后面包含数字,它将正确地返回false。它将做的唯一事情就是将空间转换为不好的令牌。 – DanRedux 2012-04-22 05:03:15

回答

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

$is_alpha_space = preg_match('/^[a-z\s]*$/i', $input); 
+0

非常感谢。我喜欢第一个。我只是想知道学习的目的,你怎么知道第一个?因为我甚至无法通过文档分辨出来。 – Carpet 2012-04-22 06:18:45

+0

这不是一个功能。它使用'str_replace()'去除空格,然后使用'ctype_alpha()'来检查结果是否是按字母顺序排列的。 – dtbarne 2012-04-22 06:21:11

+0

我明白,虽然你怎么知道它,当文档中的ctype页面没有指出(你可以做到这一点),或者它?我不能说。 – Carpet 2012-04-22 07:47:22

2
if (preg_match("^/[a-zA-Z ]+$/", $input)) { 
    // input matches 
} 

演示:http://ideone.com/jp6Wi
文档:http://php.net/manual/en/function.preg-match.php

+0

虽然请注意''[az]'可以[根据系统的区域设置来匹配不同的字符](http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in -preg-PCRE)。 – 2012-04-22 05:23:38

+0

正则表达式中有一个错字。它应该以'/ ^'开始,而不是'^ /'开始。 – toxalot 2012-12-09 07:39:53

+0

请注意,这个正则表达式只允许有空格的字符串。这可能是也可能不是预期的结果。 – toxalot 2012-12-09 08:49:33

0

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

内表达式返回不带空格的字符串,然后使用ctype_alpha``如你所愿

+0

这属于**类别如果您不需要更换规则,您应该始终使用'str_replace'而不是'preg_replace'。** – toxalot 2012-12-09 07:44:52

0

删除空格是要走的路,但记住ctype_alpha这些日子在空字符串上会导致false!在我使用的方法下面...

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