2010-10-21 75 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)3334444格式,$ preg_replace()调用后$ phone保持不变。

任何帮助将不胜感激!

+1

我不确定您希望以这种方式替换文本中的$值。你有4个捕获组,你引用3个。不应该最后一个是4美元? – kapa 2010-10-21 06:38:57

+0

@bazmegakapa当我将preg_replace中显示的这种模式插入http://gskinner.com/RegExr/时,它完美地工作。我的问题在PHP脚本中。我必须在那里做错事。 – incognito 2010-10-21 15:10:32

回答

7

只是为了确保:你需要捕捉的返回值,preg_replace不直接修改参数:

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

啊php的不一致... – SeanJA 2010-10-21 06:06:46

+0

当我尝试这种方法 $ phone = preg_replace(pattern,replace,$ phone)它返回NULL根据PHP手册:“preg_replace()返回一个数组,如果主题参数是一个数组或一个字符串 如果找到匹配项,则返回新的主题,否则如果发生错误,则主题将不变或返回NULL。 所以很明显,它在脚本中写入的方式有问题,但是什么? – incognito 2010-10-21 15:19:40

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 2010-10-21 15:20:37

0

这是造成模式错误的/ g。一旦我删除它的工作。感谢大家的努力!