Каким образом указать, что знак + может быть только один и только в начале строки?
preg_match('#^([+{1}0-9]*)$#ui', $_POST['tel'])
Внутри символьного класса большинство символов не являются специальными символами. Это касается и квантификаторов. [+{1}]
находит +
, {
, 1
или }
.
Чтобы шаблон ^([+{1}0-9]*)$
находил +
только в начале строки, его необходимо вынести за скобки, удалить квантификатор {1}
(это поведение по умолчанию) и экранировать его. Модификаторы ui
тут не нужны, так как в шаблоне нет букв.
preg_match('#^(\+[0-9]*)?$#', $_POST['tel'])
См. демо регулярного выражения
Необязательная захватываемая группа (...)?
добавлена для того, чтобы находилась также пустая строка (как в оригинальном случае).
Если знак +
необязателен, добавьте квантификатор ?
:
preg_match('#^\+?[0-9]*$#', $_POST['tel'])
^
См. демо регулярного выражения
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?