Каким образом указать, что знак + может быть только один и только в начале строки?
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'])
^
См. демо регулярного выражения
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты