cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014
-
17 déc. 2004 à 20:35
Whismeril
Messages postés19022Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 avril 2024
-
18 mars 2016 à 22:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
L'intérêt des Regex, c'est de ne pas utiliser des tas de IF Then Else, ni aucun outil de texte.
Vite fait, la Regex peut certainement être optimisée:
Private Function ValideNumeroTel(Numero As String) As String
Dim maRegex As New Regex("^(?<debut>(0|(\+33[ \.-]?)|(\(0\)[ \.-]?)|(\+33[ \.-]?\(0\)[ \.-]?))(?<zone>[1-9]))([ \.-]?(?<fin>\d\d)){4}$")
Dim m As Match = maRegex.Match(Numero)
If m.Success Then
Return String.Format("0{0} {1} {2} {3} {4}", m.Groups("zone").Value, m.Groups("fin").Captures(0).Value, m.Groups("fin").Captures(1).Value, m.Groups("fin").Captures(2).Value, m.Groups("fin").Captures(3).Value)
Else
Return "N° invalide"
End If
End Function
et un petit code pour tester
Dim aTester As String() = {"0123456789", "01 23.45-67 89", "+33 1 23 45 6789", "(0) 1 23 45 67 89", "+33 (0) 1-23-45.67 89", "+33 (0)!1 23 45 67 89"}
Dim results As New List(Of String)
For Each numero As String In aTester
results.Add(ValideNumeroTel(numero))
Next
J'ai pris la liberté d'autorisé des caractères séparateurs (espace, point ou tiret) optionnels.
PS, le code en couleur, c'est mieux non?
PS2 les 07 et les 09 existent maintenant
Juste une toute petite alternative pour apporter la prise en charge des numéros avec +33 ou (0)15678...
Dim thefirst As String = ""
Dim thePhone As String = txtEntreTel.Text
If Strings.Left(thePhone, 1) = "+" Then
thefirst = Strings.Left(txtEntreTel.Text, 3)
thePhone = Strings.Right(thePhone, thePhone.Length - 3)
End If
If InStr(thePhone, "(") And InStr(thePhone, ")") And thefirst.Length > 0 Then thePhone = Strings.Right(thePhone, thePhone.Length - InStr(thePhone, ")"))
thePhone = Regex.Replace(thePhone, "[^\d]", "")
If Strings.Left(thePhone, 1) <> "0" Then thePhone = "0" & thePhone
If thePhone = Regex.Match(thePhone, "^0[1-68][0-9]{8}$").ToString Then
thePhone = Convert.ToInt32(Regex.Match(thePhone, "^0[1-68][0-9]{8}$").ToString).ToString("0# ## ## ## ##")
txtResultTel.Text = "N° valide : " & If(thefirst.Length > 0, thefirst & Strings.Right(thePhone, thePhone.Length - 1), thePhone)
Else
txtResultTel.Text = "N° invalide"
End If
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 5 nov. 2006 à 02:26
Impécable ! 10/10
cs_christoni
Messages postés140Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 1 novembre 20107 7 juil. 2005 à 19:09
Bonjour MoiDebutantVB
Je pensais qu'une adresse Email ne devait pas comprendre de majuscules,
comme chez Wanadoo.
Donc, dans mon code, je les avais interdites.
Pour les autoriser, à la ligne 160, dans la proc « Private Sub
tnTester_Click ? »
il faut remplacer :
If Regex.IsMatch(txtEMail.Text, _
"^[a-z09._-]+@[a-z09._-]{2,}\.[a-z]{2,4}$") = True Then
par :
If Regex.IsMatch(txtEMail.Text, _
"^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$") = True Then
cs_chris81
Messages postés589Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 avril 20082 20 déc. 2004 à 13:57
merci j'ai trouve il faut rajouter
dim Regex as system.text.regularexpressions.regex
cs_chris81
Messages postés589Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 avril 20082 20 déc. 2004 à 13:47
Salut,
chez moi il me souligne REGEX que puis je faire pour arranger cela
merci
cs_christoni
Messages postés140Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 1 novembre 20107 19 déc. 2004 à 11:02
Ce bout de code n'est qu'une base que l'on peut adapter
selon ses besoins.
Je ne connais pas la syntaxe téléphonique des Us et pour
max12, et suivant ce que j'ai compris (Hors N° d'urgence),
la regex suivante devrait convenir :
"^[01]?([2-9]\d{2})?\d{3}\d{4}$"
Et le format :
"# (###) ###-####"
Et aussi convertir en ToInt64, car 11 chiffres dépassent
la capacité de Integer (Int32).
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 17 déc. 2004 à 20:37
Il faudrais aussi prendre en compte les numéros américains (USA, Canada, etc ..).
1-800-364-1234
418-567-1234
Les 7 derniers chiffres suffisent pour un appel local.
Le premier peut avoir 3 chiffre et moins, le dernier a 4 chiffre, sauf dans le cas de numéro à 3 chiffres comme celui de l'urgence : 911 ou *69 ou #12
Enfin, voilà une piste et j'oublie surement des trucs.
Sinon pour la source je n'ai pas testé puisque je ne connais pas assez la syntaxe européenne.
Modifié par Whismeril le 18/03/2016 à 22:20
L'intérêt des Regex, c'est de ne pas utiliser des tas de IF Then Else, ni aucun outil de texte.
Vite fait, la Regex peut certainement être optimisée:
et un petit code pour tester
J'ai pris la liberté d'autorisé des caractères séparateurs (espace, point ou tiret) optionnels.
PS, le code en couleur, c'est mieux non?
PS2 les 07 et les 09 existent maintenant
Modifié par NHenry le 18/03/2016 à 21:43
5 nov. 2006 à 02:26
7 juil. 2005 à 19:09
Je pensais qu'une adresse Email ne devait pas comprendre de majuscules,
comme chez Wanadoo.
Donc, dans mon code, je les avais interdites.
Pour les autoriser, à la ligne 160, dans la proc « Private Sub
tnTester_Click ? »
il faut remplacer :
If Regex.IsMatch(txtEMail.Text, _
"^[a-z09._-]+@[a-z09._-]{2,}\.[a-z]{2,4}$") = True Then
par :
If Regex.IsMatch(txtEMail.Text, _
"^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$") = True Then
20 déc. 2004 à 13:57
dim Regex as system.text.regularexpressions.regex
20 déc. 2004 à 13:47
chez moi il me souligne REGEX que puis je faire pour arranger cela
merci
19 déc. 2004 à 11:02
selon ses besoins.
Je ne connais pas la syntaxe téléphonique des Us et pour
max12, et suivant ce que j'ai compris (Hors N° d'urgence),
la regex suivante devrait convenir :
"^[01]?([2-9]\d{2})?\d{3}\d{4}$"
Et le format :
"# (###) ###-####"
Et aussi convertir en ToInt64, car 11 chiffres dépassent
la capacité de Integer (Int32).
17 déc. 2004 à 20:37
1-800-364-1234
418-567-1234
Les 7 derniers chiffres suffisent pour un appel local.
Le premier peut avoir 3 chiffre et moins, le dernier a 4 chiffre, sauf dans le cas de numéro à 3 chiffres comme celui de l'urgence : 911 ou *69 ou #12
Enfin, voilà une piste et j'oublie surement des trucs.
Sinon pour la source je n'ai pas testé puisque je ne connais pas assez la syntaxe européenne.
@+