Xpoint
   [напомнить пароль]

Регулярное выражение пропускает ненужный символ

Метки: [без меток]
2011-02-25 12:08:42 [обр] Евгений[досье]
Пишу не на Перле, а на PHP, но это, думаю, не имеет значения.
Вопрос в следующем. Имеется форма ввода, данные с которой передаются на сервер. Там введенные данные проверяются рег. выражением:
if (preg_match("~[^A-zА-я0-9_ -]~", $text) die();
Соответсвенно проходят все буквы, цифры, знак подчеркивание и тире. Но кроме них также проходит символ ^ (галочка, степень, кто как называет). Немогу понять почему. Подскажите как можно его тоже не пропустить без доп. проверок используя только рег. выр-е
спустя 1 час 10 минут [обр] Алексей Севрюков(45/1292)[досье]
Евгений[досье] Вообще то не могут у Вас проходить буквы и цифры. У Вас знак отрицания группы символов стоит ^.
Вам нужно что-то типа этого
/^[a-zA-Zа-яА-Я0-9_-]+$/
# или еще проще, если включена локаль
/^\w+$/
спустя 1 час 15 минут [обр] zloyrusskiy(0/3)[досье]
Алексей правильно сказал, но правильнее будет ^ экранировать, т.е. \^ написать и будет всё работать как надо
спустя 11 часов [обр] Евгений[досье]
Я имел ввиду буквы и цифры проходят не по рег. выражению, а по конструкции
if (preg_match("~[^A-zА-я0-9_ -]~", $text) die();
т.е. если в $text находится хотябы один символ кроме букв и цифр, то скрипт останавливается (die), а если только буквы и цифры, то продолжается.
Спасибо за совет, лучше буду использовать /^[a-zA-Zа-яА-Я0-9_-]+$/, но все же интересно почему ^ проходил.
спустя 5 часов [обр] Lynn «Кофеман»(0/571)[досье]
сообщение промодерировано
Потому что зря вы смешали большие и маленькие буквы. В диапазон от A до z кроме букв входят ещё символы [\]^_`.
спустя 6 часов [обр] Алексей Севрюков(45/1292)[досье]
Евгений[досье] посмотрите таблицу символов между A и z (регистр важен), узнаете много интересного. Lynn «Кофеман»[досье] в принципе уже ответил.
спустя 2 часа 36 минут [обр] Евгений[досье]
Спасибо большое всем!
Powered by POEM™ Engine Copyright © 2002-2005