1

我有一个使用ereg()已弃用的 PHP 的类。看着 PHP.net 我以为我可以离开并改为preg_match()

但是我得到了正则表达式的错误,或者它们失败了!!

这里有两个例子:

function input_login() {
    if (ereg("[^-_@\.A-Za-z0-9]", $input_value)) { // WORKS
    // if (preg_match("[^-_@\.A-Za-z0-9]", $input_value)) { // FAILS
        echo "is NOT alphanumeric with characters - _ @ . allowed";
    }
}

// validate email
function validate_email($email) {
    // return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email); // FAILS
}
4

3 回答 3

3

您忘记了分隔符:

if (preg_match("/[^-_@.A-Za-z0-9]/", $input_value))

此外,点不需要在字符类中转义。

i对于您的验证功能,您需要使用修饰符使正则表达式不区分大小写:

return preg_match('/^[_.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i', $email)
于 2010-07-07T06:17:55.943 回答
1

我无法再压制人们根本不喜欢我的+@example.org电子邮件地址的怀疑(我只更改了正确的部分)。这是一个绝对正常的地址,有效、简短且易于输入。简直人家不喜欢!无法使用该邮件在任何页面上注册。

那么,为什么不好好使用 PHPs Filter 扩展来验证邮件或使用 PCRE,它肯定允许所有有效的电子邮件在使用中(仅不包括 @[] ):

/^[^@]+@(?:[^.]+\.)+[A-Za-z]{2,6}$/

感谢您保存我的电子邮件,这是一个濒临灭绝的物种!

于 2010-07-07T10:34:19.883 回答
0

尝试preg_match("/[^-_@\.A-Za-z0-9]/", $input_value)

于 2010-07-07T06:18:34.883 回答