2012-08-08 2 views
0

Quelqu'un dans Stack Overflow m'a donné ce code:Ce RegEx fonctionne seulement pour le numéro de téléphone de 8 chiffres, comment le faire fonctionner pour 15 chiffres?

$output = preg_replace('/(\+?\d{2}|0)(\d{7,8})/', '0$2', $test); 

Il change l'entrée utilisateur:

+622112345 en 02112345

622112345 en 02112345

02112345 en 02112345

Malheureusement, cela ne fonctionne que pour 7-8 chiffres. J'ai décidé de changer le code dans ceci:

$output = preg_replace('/(\+?\d{2}|0)(\d{15})/', '0$2', $test); 

En changeant (\d{7,8}) en (\d{15}), j'espérais que je pourrais obtenir ce RegEx pour valider jusqu'à 15 chiffres. Mais, voici ce que j'ai:

input : 083812345678910 >> output : 083812345678910 [correct] 

input : 6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910] 

input : +6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910] 

Comment puis-je faire cela fonctionne sur 15 numéros de chiffres? Merci.

MISE À JOUR: l'entrée de l'utilisateur peut être de 10, 11, 12 ou même 13 chiffres. mais pas plus de 15 chiffres. J'ai donc besoin de ce code pour changer le préfixe: soit +62, 62 ou 0 INTO 0xxxx. peu importe le nombre de chiffres qu'ils ont, 15 maximum.

+0

Attendez, avez-vous besoin pour être valide jusqu'à 15 chiffres ou exactement 15 chiffres? {15} signifie exactement 15. {7,15} signifierait entre 7 et 15 chiffres (inclus). – BlackVegetable

+0

Quel est votre code supposé faire? –

+1

vous avez aussi des entrées à 16 chiffres –

Répondre

2

La regex correcte est:

$output = preg_replace('/(0|\+?\d{2})(\d{7,14})/', '0$2', $test); 

Même si vous avez 16 numéros de chiffres, il ne devrait y avoir au plus 14 chiffres après la prolongation, pour tenir compte de l'extension à 2 chiffres. Notez que cela fonctionnera pour plus d'extensions autres que 62, si cela n'est pas souhaité, remplacez \d{2} par 62.

Demo

+0

ayant '(\ d {7,14})' me donne faux résultat: entrée: 083812345678910, sortie: 03812345678910 (manquant 8, devrait être 083812345678910) –

+0

@RobertHanson - J'ai mis à jour ma réponse. Comme vous pouvez le voir sur [cette démo] (http://viper-7.com/GFI3D9) maintenant tous les cas de test sont correctement remplacés. – nickb

+0

vous sauvez ma journée, bro !!! –

Questions connexes