За последние 24 часа нас посетили 20785 программистов и 1651 робот. Сейчас ищут 1696 программистов ...

Только латиница в нижнем регистре, цифры, тире и слеш

Тема в разделе "Регулярные выражения", создана пользователем Vladd55, 4 фев 2023.

  1. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Нашел в сети вот такое выражение для этого случая:
    Код (Text):
    1. if (!preg_match("#^[a-z\d\-\\\\]+$#", $text))
    2. {
    3. // ошибка валидации
    4. }
    Но у меня оно работает неверно - за ошибку выдает даже комбинацию "abc/-7".

    Помогите сделать правильный код.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    В множестве цифры нужно явно указывать (диапазон). Слеш прямой что ли? Прямо и пишите его. Тире можно написать в начале или конце множества, не экранируя.
    --- Добавлено ---
    Зы, если еще точку добавить, можно это дело даже оптимизировать: https://gency.ru/comment/82
    --- Добавлено ---
    Только в начале пишите --9, а буквы потом.
     
  3. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Точку не надо, а так бы да, кратко.

    Слеш прямой.

    Так Вы имеете в виду?

    if (!preg_match("#^[0-9a-z-/]+$#", $text))

    Вроде, работает...
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    По ссылке есть пример и неоптимизированного «фрагмена», просто уберите из него точку: -/0-9 ;)

    Что непонятно в словах: тире не экранируем, если его написать в начале или конце множества? У вас НЕ так ;)
    --- Добавлено ---
    Можно поменять два последних символа местами.
     
  5. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Это я попробовал сразу - не сработало. ну и ладно.

    Вот так работает:
    Код (Text):
    1. if (!preg_match("#^[-/0-9a-z]+$#", $uri))
    Нормально, так можно оставить?
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    То был начальный «фрагмент». Я еще в первом посте дописал, что нужно потом буквы писать.

    На этот вариант я как бы и намекал изначально.
    --- Добавлено ---
    Если это реально URI, а не слаг, то у него должен быть ведущий слеш, кроме которого может вообще ничего не быть ;)
     
    Vladd55 нравится это.
  7. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Да, конечно. Эта ситуация обработана.
    Спасибо!
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Ну ОК. А то можно уточнить так для исходного REQUEST_URI:
    Код (Text):
    1. #^/[...]*(...)$#
    На месте круглых скобок можно разместить фрагмент для строки параметров.
     
    Vladd55 нравится это.
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    922
    Симпатии:
    143
    то самое место для изучения регулярок, нет бы доку почитать