0

我试图在这里查看为什么这段代码不起作用,无处可寻,现在我希望有人能帮助我。

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 语句应该返回“错误”。

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

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

4

5 回答 5

1

您的模式应如下所示:

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

^符号用于否定字符集。

于 2013-02-18T05:27:01.550 回答
1

使用!preg_match(pattern,$string),如果您需要验证包含空格的字符串,则使用以下,否则,\spreg_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';
    }
}
于 2013-02-18T05:27:14.527 回答
0

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

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

于 2013-02-18T05:45:39.433 回答
0

尝试:

preg_match('/[a-zA-Z0-9]+\ ?/', $string)
于 2013-02-18T05:19:36.823 回答
0

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

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

您的功能可以是:

function validateData($string) {
    return (strlen($string) <= 1 || !ctype_alnum($string)) ? 'error' : 'normal';
}
于 2013-02-18T05:48:36.737 回答