2010-10-21 5 views
0

У меня есть пользовательская форма, в которой я беру номер телефона в качестве ввода в одном из моих полей. У меня есть два отдельных оператора RegEx, проверяющих входные данные.preg_replace в моем скрипте PHP не работает

Первый:

preg_match('/^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-|)?[0-9]{4}$/', $phone);

и он прекрасно работает. Он может определить множество различных форматов т.е. 222-333-4444 или 2224445555.

С другой стороны, когда я пытаюсь:

preg_replace('/\+?1?[-\s.]?\(?(\d{3})\)?[-\s.]?(\d{3})[-\s.]?(\d{4})/g', '($1) $2-$3', $phone);

, который, как предполагается, форматировать входящий в строку (222) 333-4444 формат, телефон не изменяется после вызова preg_replace().

Любая помощь будет очень признательна!

+1

Я не уверен, что вы хотите, чтобы ваши значения $ заменяли текст таким образом. У вас есть 4 группы захвата, вы ссылаетесь на 3. Не должен ли последний быть 4 доллара? – kapa

+0

@bazmegakapa, когда я подключаю этот шаблон, показанный в preg_replace, к http://gskinner.com/RegExr/, он работает безупречно. Моя проблема связана с PHP-скриптом. Я должен делать что-то не так. – incognito

ответ

7

Просто чтобы убедиться, что: Вам нужно поймать возвращаемое значение, preg_replace не изменяет параметры непосредственно:

$phone = preg_replace(..., $phone); 
+2

А несоответствия php ... – SeanJA

+0

когда я пытаюсь использовать этот метод $ phone = preg_replace (pattern, replace, $ phone), он возвращает NULL, который согласно руководству PHP: «preg_replace() возвращает массив, если параметр subject массив или строку в противном случае. Если совпадения найдены, новый объект будет возвращен, иначе объект будет возвращен без изменений или NULL, если произошла ошибка. " Итак, очевидно, что что-то не так с тем, как оно написано в скрипте, но что? – incognito

0

Упрощенное выше, и придумал следующее:

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , $inString); 

результаты тестирования:

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , '222-333-4444'); 
# Returns '(222) 333-4444' 

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , '2223334444'); 
# Returns '(222) 333-4444' 
+0

Я сделаю это и посмотрю, что произойдет. Спасибо! – incognito

0

Это было/г вызывает ошибку в шаблоне. Как только я удалил это, он сработал. Спасибо всем за попытку!

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