PHP5,if,elseif,如果preg_replace无法正常工作

时间:2013-02-18 05:17:23

标签: php preg-match

我试着在这里查看为什么这段代码不起作用,没有在哪里,现在我希望有人可以帮助我。

function validateData($string) {
    if (empty($string)) {
        return 'error';
    } elseif (strlen($string) <= 1) {
        return 'error';
    } elseif (preg_match('[a-zA-Z0-9]+\ ?', $string)) {
        return 'error';
    } else {
        return 'normal';
    }
}

当我执行上面的代码时,使用:

echo validateData('Test');
echo validateData('Test!');

这两个回声'正常'..然而,第二个例子包含'!'在字符串中,由于上面代码中的preg_match语句,应该返回'error'。

成就目标。检查字符串以确保它不是EMPTY,它超过1个字符并且只包含a-z,A-Z,0-9或空格。所以没有特殊字符。

非常感谢你提前得到的所有答案,我真的很感激!

5 个答案:

答案 0 :(得分:1)

您的模式应如下所示:

preg_match('/([^a-zA-Z0-9 ])+/', $string);

^符号用于否定字符集。

答案 1 :(得分:1)

使用!preg_match(pattern,$string),如果您需要验证包含空格的字符串,请使用以下内容,否则请从\s模式中删除preg_match

 function validateData($string) {
    if (empty($string)) {
         return 'error';
    } elseif (strlen($string) <= 1) {
         return 'error';
    } elseif (!preg_match('/^[A-Za-z0-9\s]+$/',  $string)) {
         return 'error';
    } else {
       return 'normal';
    }
}

答案 2 :(得分:0)

尝试:

preg_match('/[a-zA-Z0-9]+\ ?/', $string)

答案 3 :(得分:0)

替换 preg_match('[a-zA-Z0-9]+\ ?', $string)

preg_match('/[^a-zA-Z0-9]/', $string)

答案 4 :(得分:0)

如果字符串为空,当你要求它的字符串长度时它将等于0,因此测试空($ string)是没用的,因为它被第二次测试覆盖。

使用正则表达式增加了复杂性而没有任何好处,有一个专用函数可以为字母数字字符串返回true或false:ctype_alnum($ string)

您的功能可以是:

function validateData($string) {
    return (strlen($string) <= 1 || !ctype_alnum($string)) ? 'error' : 'normal';
}