Duplicaté possible: strong>
une regex complète pour la validation du numéro de téléphone P>J'ai un numéro de téléphone non formaté (garanti à 10 chiffres) et une extension non formatée (pourrait être null, vide ou tout nombre de chiffres). J'ai besoin de les mettre ensemble dans une chaîne "amicale". Je pensais les concaténer, puis formater la concaténation à l'aide d'une regex.replace. Voici le test de l'unité que j'utilise pour essayer différentes regex avant de brancher un dans: p>
xxx pré> La chaîne formatée attendue est le numéro de téléphone formaté, sans "x" et extension . Cependant, le dernier groupe de capture correspond à la "X" avec ou sans nombre derrière elle, donc au lieu de "123-456-7890", je reçois "123-456-7890 x". C'est le dernier peu de développement qui doit être attaché avant une libération. Aide? P> BlockQuote>
3 Réponses :
x ne correspond pas par votre regex, il n'est donc pas remplacé dans la chaîne. Essayez cette regex à la place: dans la nouvelle regex x code> n'est pas facultatif em> - il sera toujours là selon votre code ( Si vous voulez que ce soit en option, vous pouvez utiliser ? X? (\ D *) code>). De plus, nous utilisons \ d * code>, assurez-vous donc que le dernier groupe correspondra toujours, même quand il est vide. P> p>
C'était le problème; Étant donné que la fin de la chaîne n'était pas appariée, il a été laissé intact pendant le remplacement. J'ai résolu une manière légèrement différente, ajoutant une non-propre. * $ Pour indiquer que je voulais correspondre (et remplacer) la chaîne entière si j'ai capturé les pièces facultatives ou non.
Ceci n'est peut-être pas une réponse directe à votre question, mais éventuellement utile ... nous utilisons ce modèle: puis reformate avec: p> Remarque: Dans notre cas, nous avons inclus le code national si elles le faisaient, vous pourriez facilement en sortir. Nous n'avons également pas inclus l'extension là-bas - comme nous le déplacons et mettons dans un champ différent si nous le trouvons. P> P>
J'aime les expressions régulières, ne me méprenez pas, mais cela ne semble pas être une zone utile pour les appliquer. Tout ce que vous faites est d'ajouter des tirets à une chaîne de 10 numéros, puis ajoutez un "X" optionnel suivi d'une extension. Plus simple est meilleur.
public static String beautifyPhoneNumber(String number, String extension)
{
String beautifulNumber = number.Substring(0, 3) + "-" +
number.Substring(3, 3) + "-" +
number.Substring(6, 4);
if (!String.IsNullOrEmpty(extension))
{
beautifulNumber += " x" + extension;
}
return beautifulNumber;
}
Supprimer le X du groupe?
(x \ d +)? code> devient[\ sx] *? (\ d +)? code>Lorsque vous avez écrit Exception i>, vous vouliez dire extension i>, non?
Pourquoi voudriez-vous les formater après i> la concaténation?
Utilisez Expresso de Ultrapico.com pour le tester, hth
Pourquoi formater un numéro de téléphone sans extension avec un modèle différent?
Je déteste ces éléments de formatage du numéro de téléphone, car ils supposent toujours que le numéro de chacun a le même nombre de chiffres (Nope!) Dans le même motif (Nope!)
@Donal, très vrai hein? Peut-être qu'il fait une application qui ne fonctionne que en Amérique du Nord? Les chiffres ici sont tous garantis comme 10 chiffres (à l'exclusion du code de pays et comprenant l'indicatif régional).
@John: Eh bien, ça va échouer horriblement sur d'autres marchés et les utilisateurs de l'application vont ignorer cela jusqu'à ce qu'il les mord totalement sur le cul. (Il est presque aussi mauvais que les adresses postales, pires que les numéros de téléphone dues à avoir encore plus de structure variable.)