2009-06-03 4 views
2

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

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

ответ

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) 
+0

Спасибо, что работали :) – Aistina

3

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

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

Further reference.

И если у вас есть выбор использования PREG (PCRE) ...

Смежные вопросы