Почему это регулярное выражение соответствует положительному?
Учитывая шаблон ^[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)...