2010-04-27 55 views
1

我有这样的表达:

$regex_phone = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})' 
       .'(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})' 
       .'[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/'; 
if(!preg_match($regex_phone, $data['phone'])){ 
    $error[] = "Please enter a valid phone number."; 
}else{ 
    $data['phone'] = preg_replace($regex_phone, '($1) $2-$3 ext.$4', $data['phone']); 
} 

这将需要一个电话号码,例如:803-888-8888转2以及803-888-8888

首先数字格式为: (803)888-8888 EXT.2 - 所期望的效果

第二数字格式为:(803)888-8888分机 - 空白扩展名

如何设置它,以便如果$ 4为空,即分机。不会显示?

非常感谢您提供的帮助。我希望这很清楚。

回答

3

我不知道这个花哨的正则表达式是真的有必要
但让我们看看......

啊,我为了
允许丢失的分机号码修改约$ 4的区域。你能否发现 的区别?

... 
$regex_phone = 
    '/^ 
    (?: 
     1(?:[. -])? 
    )? 
    (?: 
     \((?=\d{3} \)) # possible mistake? (probably correct) 
    )? 
    ([2-9]\d{2})  # $1 
    (?: 
     (?<=\(\d{3})\) 
    )? 
    \s? 
    (?: 
     (?<=\d{3}) 
     [.-] 
    )? 
    ([2-9]\d{2})  # $2 
    [.\s-]? 
    (\d{4})   # $3 
    (?: 
     \s? ext [.\s]? 
     (\d{1,5})?  # $4 
    )? 
$/ix'; 

if(preg_match($regex_phone, $data['phone'], $m)) { 
    $data['phone'] = "$m[1] $m[2]-$m[3]" . (isset($m[4]) ? " ext.$m[4]" : ''); 
} 
else { 
    $error[] = "Please enter a valid phone number.<br />"; 
} 
... 

问候

RBO

+0

甚至没有想获得的preg_match变量。像魅力一样工作。我修改了一下,以适应我的编码风格,但isset()和$ m是我所需要的。谢谢rbo – bradenkeith 2010-04-27 17:15:20

相关问题