retour uniquement des Chiffres de 0 à 9 à partir d'une Chaîne
J'ai besoin d'une expression régulière que je peux utiliser dans VBScript et .NET qui sera de retour que les nombres qui se trouvent dans une chaîne de caractères.
Par Exemple, de la suite de "chaînes" doit retourner seulement 1231231234
- 123 123 1234
- (123) 123-1234
- 123-123-1234
- (123)123-1234
- 123.123.1234
- 123 123 1234
- 1 2 3 1 2 3 1 2 3 4
Il sera utilisé dans un e-mail de l'analyseur de trouver les numéros de téléphone, les clients peuvent prévoir dans l'e-mail et faire une recherche de base de données.
J'ai peut-être manqué un semblable regex, mais j'ai fait une recherche sur regexlib.com.
[EDIT] - Ajout d'un code généré par RegexBuddy après la mise en place musicfreak la réponse de
Code VBScript
Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "[^\d]"
ResultString = myRegExp.Replace(SubjectString, "")
VB.NET
Dim ResultString As String
Try
Dim RegexObj As New Regex("[^\d]")
ResultString = RegexObj.Replace(SubjectString, "")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
C#
string resultString = null;
try {
Regex regexObj = new Regex(@"[^\d]");
resultString = regexObj.Replace(subjectString, "");
} catch (ArgumentException ex) {
//Syntax error in the regular expression
}
- Comme je l'ai dit, \D est plus simple que ^\d.
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si VBScript a une sorte de "remplacement d'expressions régulières" de la fonction, mais si c'est le cas, vous pourriez faire quelque chose comme ce pseudo-code:
Je ne sais pas VBScript donc je ne peux pas vous donner le code exact, mais ce serait enlever tout ce qui n'est pas un nombre.
EDIT: assurez-vous que l'indicateur global (le "g" à la fin de la regexp), sinon il sera seul match à la première non-nombre de votre chaîne.
Dans .NET, vous pouvez extraire juste les chiffres de la chaîne. Comme ceci:
using System.Linq;
pour cela. Pour moi, VS2010 juste dit il n'y a pas de méthode "Où" pour les chaînes, et IntelliSense ne me donnera pas l'ajout automatique de l'instruction à l'aide.Comme une alternative à la principale
.Net
solution, adaptée à partir d'un question similaire, la réponse:Remarque: vous n'avez résolu la moitié du problème ici.
Pour NOUS, les numéros de téléphone entrés dans la "nature", vous pouvez avoir:
Vous aurez besoin d'ajouter d'intelligence de votre code afin de les rendre conformes à la liste de chiffres à une norme unique qui vous fait rechercher dans votre base de données.
Quelques choses simples que vous pouvez faire pour résoudre ce problème:
Avant la RegEx suppression de la non-chiffres, voir si il y a un "x" dans la chaîne. Si il y est, hacher le tout hors tension après elle (va gérer la plupart des versions de l'écriture d'un numéro de poste).
Pour n'importe quel nombre avec plus de 10 chiffres commençant par un "1", coupez-le 1. Il ne fait pas partie de la zone de code, NOUS indicatifs de zone de démarrage dans le 2xx gamme.
Pour un nombre encore supérieur à 10 chiffres, supposons que le reste est une extension de la sorte, et le couper off.
Faire votre recherche de base de données à l'aide d'un "termine-avec un motif de recherche (SELECT * from mytable where numéro de téléphone, COMME" blah%'). Cela permettra de gérer sitations (même si, avec la possibilité de l'erreur), où la zone de code n'est pas fourni, mais votre base de données a le nombre avec le code de zone.
Par les regards des choses, votre essayant d'attraper tout les 10 chiffres du numéro de téléphone....
Pourquoi ne pas faire une chaîne de remplacer tout d'abord sur le texte pour supprimer les caractères suivants.
Puis par la suite, il vous suffit de faire une regex recherche d'un numéro à 10 chiffres.
Êtes-vous passés par la n ° de téléphone de la catégorie sur regexlib. Semble être tout à fait un peu de faire ce que vous avez besoin.
En ce qui concerne les points soulevés par richardtallent, ce code permet de gérer la plupart de vos problèmes dans le respect des numéros de poste, et la NOUS code du pays (+1) étant précédée.
Pas la solution la plus élégante, mais j'ai eu à résoudre rapidement le problème afin que je puisse avancer dans ce que je fais.
J'espère que cela aide quelqu'un.