我的PHP脚本中的preg_replace不起作用

时间:2010-10-21 05:29:19

标签: php regex preg-replace

我有一个用户表单,我在其中一个字段中输入了一个电话号码作为输入。我有两个单独的RegEx语句检查输入。

首先是:

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

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:7)

只是为了确保:您需要捕获返回值,preg_replace不会直接修改参数:

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

答案 1 :(得分: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'

答案 2 :(得分:0)

是/ g导致模式中的错误。一旦我删除它,它工作。谢谢大家的尝试!