Подскажите как правильно составить регулярное выражение для проверки строи которая может содержать только цифры и возможны(но не обязательны) символы 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 но почему то он не экранируется символом \ что я делаю не так?
^[0-9]+\| - вернет истину, если строка начинается с одной или более цифр за которыми следует символ |.
Чтобы убедиться, что строка состоит только из цифр и символов, (порядок не важен) подойдет такое выражение:
^[0-9\|]+$
Оно вернет истину, если строка от начала до конца будет содержать один или более символов из группы в квадратных скобках.
Если вы хотите проверить, состоит ли строка из одних только чисел, разделенных символом |, используйте
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 и более цифр.Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости