Почему это регулярное выражение соответствует положительному? - PullRequest
2 голосов
/ 03 июня 2009

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

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

Ответы [ 2 ]

7 голосов
/ 03 июня 2009

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)
3 голосов
/ 03 июня 2009

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

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

Дополнительная справка.

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

...