为什么我的RegExp返回false并且字符数正确?

时间:2010-12-17 14:33:32

标签: php mysql regex

$gi = filter_var(filter_var($_POST['group_id'], FILTER_SANITIZE_STRING),
        FILTER_VALIDATE_REGEXP, array(
           "options"=>array("regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/")));

这是我正在使用的代码。这是一个PHP& MySQL应用程序。问题是它以5个字符或更短的字符返回FALSE。如果我将'5'更改为'6',那么任何6个字符或更短的字符都会返回FALSE。为什么是这样?

此外,以下代码的行为相同:

$gi = filter_var($_POST['group_id'], FILTER_VALIDATE_REGEXP,
        array("options"=>array(
           "regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/")));

我的印象是我的正则表达式是1)将条目限制为字母,数字和下划线,2)禁止空格,3)要求至少5个字符并设置最多20个字符。

2 个答案:

答案 0 :(得分:2)

你的正则表达式:

/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}

匹配5个字符,但只能匹配[a-zA-Z0-9_]中的1个字符,然后匹配5个字符。所以至少你需要一个6个字符的字符串来匹配。

根据您的上一段,以下内容更符合您的要求:

/^[0-9a-zA-Z_]{5,20}$/

编辑:更正要感谢@Allan,对于认知思维模式尚不完全,咖啡剥夺。 ; - )

答案 1 :(得分:0)

/.{5,20}/

这条RegEx负责,因为您要求引擎匹配至少5个字符(任意字符)和最多20个字符。相应地修复那件。

希望有所帮助:)

编辑:对不起,没看过问题的最后部分。

1)错了。 ^运算符否定前面的任何内容,因此第一个char不能是任何字母,任何数字或下划线[如果你真的想要那个过度杀戮过滤那么用/^[\w_]/替换] 2)对。在该行尾之前不能有空格。 3)编辑以上的内容很多;)

有关更多正则表达式信息,请转到http://regular-expressions.info