2010-10-21 6 views
0

J'ai un formulaire utilisateur où je prends un numéro de téléphone en entrée dans un de mes champs. J'ai deux instructions RegEx séparées qui vérifient l'entrée.preg_replace dans mon script PHP ne fonctionne pas

La première est:

preg_match('/^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-|)?[0-9]{4}$/', $phone);

et il fonctionne très bien. Il peut identifier de nombreux formats différents à savoir 222-333-4444 ou 2224445555.

D'autre part lorsque je tente:

preg_replace('/\+?1?[-\s.]?\(?(\d{3})\)?[-\s.]?(\d{3})[-\s.]?(\d{4})/g', '($1) $2-$3', $phone);

qui est censé chaîne de format entrant dans (222) 333-4444 format, $ phone est inchangé après l'appel preg_replace().

Toute aide sera grandement appréciée!

+1

Je ne suis pas sûr que vous voulez que vos valeurs $ dans le texte de remplacement de cette façon. Vous avez 4 groupes de capture, vous référencez 3. Le dernier ne devrait-il pas être 4 $? – kapa

+0

@bazmegakapa quand je branche ce modèle montré dans le preg_replace dans http://gskinner.com/RegExr/ cela fonctionne parfaitement. Mon problème est dans le script PHP. Je dois faire quelque chose de mal là-bas. – incognito

Répondre

7

Juste pour vous assurer: Vous devez prendre la valeur de retour, preg_replace ne modifie pas les paramètres directement:

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

Ah les incohérences de php ... – SeanJA

+0

lorsque j'essaie cette méthode $ phone = preg_replace (pattern, replace, $ phone) retourne NULL qui selon le manuel de PHP: "preg_replace() retourne un tableau si le paramètre sujet est un tableau, ou une chaîne sinon Si des correspondances sont trouvées, le nouveau sujet sera retourné, sinon l'objet sera retourné inchangé ou NULL si une erreur est survenue. " Donc, évidemment, il y a quelque chose qui ne va pas dans le script, mais quoi? – incognito

0

simplifié ci-dessus, et est venu avec les éléments suivants:

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , $inString); 

résultats des tests:

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

Je vais leur donner un coup de feu et voir ce qui se passe. Je vous remercie! – incognito

0

Il était le/g provoquant l'erreur dans le motif. Une fois que j'ai enlevé cela a fonctionné. Merci à tous d'avoir essayé!

Questions connexes