2010-04-27 4 views
1

J'ai cette expression:

$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']); 
} 

Cela prendra un numéro de téléphone tels que: 803-888-8888, poste 2, ainsi que 803-888-8888

formats numériques d'abord comme: (803) 888-8888 EXT.2 - l'effet recherché

formats numériques comme deuxième: (803) 888-8888 ext. - extension vide

Comment puis-je le régler de sorte que si $ 4 est vide, cela ext. ne s'affichera pas?

Merci beaucoup pour toute aide que vous pouvez offrir. J'espère que c'était clair.

Répondre

3

Je ne suis pas sûr que cette fantaisie regex est vraiment nécessaire
mais permet de voir ...

Ahh, je modifie la région autour de 4 $ pour
pour permettre manquantes numéros ext. Pouvez-vous repérer les différences?

... 
$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 />"; 
} 
... 

Cordialement

RBO

+0

Ne pense même pas à obtenir une variable preg_match. Travaillé comme un charme. J'ai modifié un peu pour convenir à mon style de codage, mais le isset() et le $ m étaient ce dont j'avais besoin. Merci rbo – bradenkeith

Questions connexes