Нашел в сети вот такое выражение для этого случая: Код (Text): if (!preg_match("#^[a-z\d\-\\\\]+$#", $text)) { // ошибка валидации } Но у меня оно работает неверно - за ошибку выдает даже комбинацию "abc/-7". Помогите сделать правильный код.
В множестве цифры нужно явно указывать (диапазон). Слеш прямой что ли? Прямо и пишите его. Тире можно написать в начале или конце множества, не экранируя. --- Добавлено --- Зы, если еще точку добавить, можно это дело даже оптимизировать: https://gency.ru/comment/82 --- Добавлено --- Только в начале пишите --9, а буквы потом.
Точку не надо, а так бы да, кратко. Слеш прямой. Так Вы имеете в виду? if (!preg_match("#^[0-9a-z-/]+$#", $text)) Вроде, работает...
По ссылке есть пример и неоптимизированного «фрагмена», просто уберите из него точку: -/0-9 Что непонятно в словах: тире не экранируем, если его написать в начале или конце множества? У вас НЕ так --- Добавлено --- Можно поменять два последних символа местами.
Это я попробовал сразу - не сработало. ну и ладно. Вот так работает: Код (Text): if (!preg_match("#^[-/0-9a-z]+$#", $uri)) Нормально, так можно оставить?
То был начальный «фрагмент». Я еще в первом посте дописал, что нужно потом буквы писать. На этот вариант я как бы и намекал изначально. --- Добавлено --- Если это реально URI, а не слаг, то у него должен быть ведущий слеш, кроме которого может вообще ничего не быть
Ну ОК. А то можно уточнить так для исходного REQUEST_URI: Код (Text): #^/[...]*(...)$# На месте круглых скобок можно разместить фрагмент для строки параметров.