+
- это специальный символ, который указывает на 1 или более из предыдущего символа, и, не экранируя его, вы применяете его к каретке. экранируйте его \
, и оно будет соответствовать буквальному плюсу.
if(!preg_match('/^\+[0-9]$/', '+1234567'))
EDIT:
Причина, по которой он не совпадает, состоит в том, что вы указали 1 цифру от 0-9 и конец строки с $
. Вы должны сделать это переменное количество цифр.
if(!preg_match('/^\+[0-9]+$/', '+1234567')) {
Укороченная версия:
if(!preg_match('/^\+\d+$/', '+1234567')) {