Регулярное выражение для цифр и символа pipe (труба) |

80
21 августа 2021, 17:30

Подскажите как правильно составить регулярное выражение для проверки строи которая может содержать только цифры и возможны(но не обязательны) символы pipe (турба) "|" пробовал так:

$an = '1|2|02932';
if (preg_match("/^0-9\|/",$an) == 0) {   echo 1; }
if (preg_match("/^0-9|/",$an) == 0) {    echo 1; }
if (preg_match("/^0-9 |/",$an) == 0) {   echo 1; }
 if (preg_match("/^0-9 ?|/",$an) == 0) {     echo 1; }

ни чего из этого не работает нормально, по моему этот символ забронирован как некое значение типа OR но почему то он не экранируется символом \ что я делаю не так?

Answer 1

^[0-9]+\| - вернет истину, если строка начинается с одной или более цифр за которыми следует символ |.

Чтобы убедиться, что строка состоит только из цифр и символов, (порядок не важен) подойдет такое выражение:

^[0-9\|]+$

Оно вернет истину, если строка от начала до конца будет содержать один или более символов из группы в квадратных скобках.

Answer 2

Если вы хотите проверить, состоит ли строка из одних только чисел, разделенных символом |, используйте

if (preg_match('~^\d+(?:\|\d+)*\z~', $an)) {
    echo 1;
}

Или, если числа могут быть дробными:

if (preg_match('~^([-+]?\d*\.?\d+(?:[eE][-+]?\d+)?)(?:\|(?1))*\z~', $an)) {
    echo 1;
}

См. демо выражения №1 и демо выражения №2.

Подробности

  • ^ - начало строки
  • \d+ - 1+ цифр
  • (?:\|\d+)* - 0 и более повторов последовательности | и 1+ цифр
  • \z - абсолютный конец строки (сразу после не должно быть ничего, даже финального \n, $ этого не обеспечивает).

Во втором шаблоне вместо \d+ использован шаблон ([-+]?\d*\.?\d+(?:[eE][-+]?\d+)?) для нахождения дробного или целого числа, а (?1) повторяет этот шаблон (чтобы не писать одно и то же):

  • [-+]? - необязательный символ - или +
  • \d* - 0 и более цифр
  • \.? - необязательный символ .
  • \d+ - 1 и более цифр
  • (?:[eE][-+]?\d+)? - буква e или E, затем необязательный символ + или -, а потом 1 и более цифр.
READ ALSO
В wp вывод архива только по месяцам?

В wp вывод архива только по месяцам?

Нужно вывести отдельно сылки на архив по годам и по месяцам

86
Поиск общего значения Laravel

Поиск общего значения Laravel

Есть таблицаid city_id region_id 1 2 3 2 3 3 3 1 3 4 5 2 5 5 2

188
Laravel api в респонсе отдать код без тела

Laravel api в респонсе отдать код без тела

Есть laravel, debugbarРоут прописанный в Api

105
No such file or directory failed to open stream

No such file or directory failed to open stream

Не удается задать правильный путь к файлу file(/home/c/cd09875/lenia/public_html/site/sentences/feasibletxt): failed to open stream: No such file or directory in /home/c/cd09875/lenia/public_html/site/main_page

172