2

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

我正在打电话ereg($pattern, $username),正在运行 PHP 5.2.8 版。

4

2 回答 2

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)
于 2009-06-03T11:16:37.610 回答
3

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

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

进一步参考。

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

于 2009-06-03T12:46:05.777 回答