【问题标题】:Why is this regular expression match positive?为什么这个正则表达式匹配是积极的?
【发布时间】:2010-10-30 23:02:06
【问题描述】:

给定模式^[a-zA-Z0-9 .\-_]+$ 和字符串te\\st,为什么匹配是正数?我用它来验证用户名,我不希望人们在他们的用户名中加上斜杠,它会与 URL 混淆。

我正在调用ereg($pattern, $username),运行 PHP 版本 5.2.8。

【问题讨论】:

    标签: php regex posix-ere


    【解决方案1】:

    ereg 疯了。我建议避免它。您应该为此尝试使用preg_match

    $count = preg_match('/^[a-zA-Z0-9 .\-_]+$/', 'te/\st', $matches);
    print_r($matches); // empty array (no matches)
    print $count; // 0 (no matches)
    

    【讨论】:

      【解决方案2】:

      ^[a-zA-Z0-9 ._-]+$

      也可以。要匹配文字 - 在字符类中,通常最安全的做法是将其放在结尾 ] 之前,或者在使用 ereg (POSIX) 时将其放在开头 [ 之后。您应该能够逃脱 - 但由于某种原因直接在 .似乎失败了。无论如何,如果您必须使用 ereg,有一个解决方案。关于为什么失败的真正好问题,.应该只是字符类中的普通字符。 Ereg 有问题。

      Further reference.

      如果您可以选择使用 preg (PCRE)...

      【讨论】:

        猜你喜欢
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 2015-01-12
        • 2013-04-19
        • 2011-09-17
        相关资源
        最近更新 更多