代码之家  ›  专栏  ›  技术社区  ›  bradenkeith

preg_replace-如果$4为空,则不包括字符串

  •  1
  • bradenkeith  · 技术社区  · 15 年前

    我有这样的表达:

    $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转2——预期效果

    第二种号码格式为:(803)888-8888分机号--空白分机号

    如果4美元是空的,我怎么设置它? 提取。 不会出现吗?

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

    1 回复  |  直到 11 年前
        1
  •  3
  •   rubber boots    15 年前

    我不确定这个花哨的瑞格舞真的是必要的
    但是让我们看看……

    啊,我把这个地区修改了大约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