从ereg更改为preg_match时,PHP表达式失败

时间:2010-07-07 06:15:52

标签: php regex pcre posix-ere

我有一个使用不推荐使用的PHP ereg()的类。 在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
}

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

所以,为什么不好,并使用PHPs Filter扩展来验证邮件或使用PCRE,这绝对允许使用所有有效的电子邮件(仅限@ []):

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

感谢您保存我的电子邮件,这是一种节食品种!

答案 2 :(得分:0)

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