为什么这个正则表达式匹配正面?

时间:2009-06-03 11:13:18

标签: php regex posix-ere

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

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

2 个答案:

答案 0 :(得分:7)

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)

答案 1 :(得分:3)

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

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

Further reference.

如果你有选择使用preg(PCRE)...