2013-12-09 4 views
0

Я хочу отобразить сообщение об ошибке, если число не соответствует числу с дефисом, знаком плюс, пробелом или скобками. Нет номеров.выражение preg_match для телефонных номеров

Например:

(012) 123 4567 
(012)-123-4567 
012-345-6789 
123 123 1234 
+12 23 213 3456 

Приведенные выше примеры все работы с этим выражением:

if (!preg_match("/^[0-9\-]|[\+0-9]|[0-9\s]|[0-9()]*$/", $_POST['tel'])) { 
    $telErr = "Invalid contact number"; 
} 

Но это дает письма, которые я не хочу.

Пример:

+00000000a 

В приведенном выше примере принимается выражением я.

Пожалуйста, помогите мне с этим.

ответ

0

Лучше регулярное выражение:

"/^[\+0-9\-\(\)\s]*$/" 
+0

Это также будет соответствовать ++++++++ 234 + - – avonnadozie

1

Этот expression'll принимает + 5number, 5number

"'^(([\+]([\d]{2,}))([0-9\.\-\/\s]{5,})|([0-9\.\-\/\s]{5,}))*$'" 
0

I первой Ыборка строки немного (что позволяет избежать ненужных матчей):

$input = preg_replace('/[^0-9+\(\)-]/', '', $_POST['tel']); 

I чем соответствовать американскому номеру +1 (xxx) xxx-xxxx;

if(preg_match('/^(\+1|001)?\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([ .-]?)([0-9]{4})/',$input)) 
     $result = "match: USA"; 

else $result = "no match"; 

это позволяет для довольно некоторых входных конфигураций - только ваш последний номер не будет соответствовать (если бы я не делать очистку первой, а не из-за международного кода, который соответствует образцу, но из-за раскола в код зоны) все остальные идут также без очистки.

Смежные вопросы