Почему это регулярное выражение соответствует положительному?

Учитывая шаблон ^[a-zA-Z0-9 .\-_]+$ и строка te\\stпочему матч положительный? Я использую это для проверки имен пользователей и не хочу, чтобы люди ставили косые черты в их именах, это портит URL-адреса.

Я зову ereg($pattern, $username), работает PHP версии 5.2.8.

2 ответа

Решение

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)

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

Будет работать так же. Для сопоставления с литералом - в классе символов обычно безопаснее размещать его непосредственно перед окончанием] или сразу после открытия [при использовании ereg (POSIX). Вы должны быть в состоянии выйти из - но по какой-то причине, избегая его сразу после. Кажется, не удается. В любом случае, есть решение, если вы должны использовать ereg. Действительно хороший вопрос о том, почему это не удается. должен быть просто нормальным персонажем в классе символов. Эрег глючит.

Дальнейшая ссылка.

И если у вас есть выбор, используйте preg (PCRE)...

Другие вопросы по тегам