регулярка 0-9 и один +

175
05 октября 2018, 13:20

Каким образом указать, что знак + может быть только один и только в начале строки?

preg_match('#^([+{1}0-9]*)$#ui', $_POST['tel'])
Answer 1

Внутри символьного класса большинство символов не являются специальными символами. Это касается и квантификаторов. [+{1}] находит +, {, 1 или }.

Чтобы шаблон ^([+{1}0-9]*)$ находил + только в начале строки, его необходимо вынести за скобки, удалить квантификатор {1} (это поведение по умолчанию) и экранировать его. Модификаторы ui тут не нужны, так как в шаблоне нет букв.

preg_match('#^(\+[0-9]*)?$#', $_POST['tel']) 

См. демо регулярного выражения

Необязательная захватываемая группа (...)? добавлена для того, чтобы находилась также пустая строка (как в оригинальном случае).

Если знак + необязателен, добавьте квантификатор ?:

preg_match('#^\+?[0-9]*$#', $_POST['tel'])
                ^

См. демо регулярного выражения