Autoriser quelques caractères

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 25 août 2014 à 16:16
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 26 août 2014 à 12:12
Bonjour à tous !

Comment je peux autorise que les caractères souhaités à ma textbox svp ?
Je sais que le regex [^A-Z] autorise de a à z et de A à Z mais je voudrais lui dire de n'autoriser que le mot :
9503621-RJ
par exemple.

        If System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString().ToUpper(), "[^A-Z]") Then
            e.Handled = True
        End If
        If e.KeyChar = ChrW(8) Then
            'la touche backspace
            e.Handled = False
        End If


Merci

----------
OS            : Windows 7 Pro 64 Bit
Plateforme    : Visual Studio 2010

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 août 2014 à 16:26
Bonjour,
Intéresse-toi à l'opérateur Like. Il devrait te permettre de faire facilement ce que tu veux faire.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 17:14
Je crois que ca le fait aussi :
Private Sub TextBox9_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox9.KeyPress
        If InStr("9503621-RJ", e.KeyChar) = 0 And e.KeyChar <> vbBack Then e.Handled = True
    End Sub


Tu en penses quoi ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 août 2014 à 19:01
Non ! As-tu essayé ?
Ton code accepterait par exemple et entre autres "1111111111111111111111"
===>> utilise Like
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 19:08
Je ne comprends pas ucfoutu, je suis arrivé à écrire :
9503622111111111111111111111111111111111111111111111111111111111111111111111111111111111111-RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
sans problème.

Ta réponse me surprends, stp si y 'a un problème dis le moi !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 août 2014 à 19:27
C'est bien ce que je te disais !
Et ce n'est pas ce que tu dis vouloir par ton premier message !
Quel est ton but exact, finalement ?

0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 19:40
Premier message:
Comment je peux autorise que les caractères souhaités à ma textbox svp ?
Je sais que le regex [^A-Z] autorise de a à z et de A à Z mais je voudrais lui dire de n'autoriser que le mot 9503621-RJ par exemple.

Je comprends effectivement ce que tu dis, tu pensais que je voulais autoriser "9503621-RJ" uniquement comme un format précis. J'ai dû mal m'expliquer et m'en excuse.
Je voulais autoriser uniquement ces caractères dans ma textbox :
9503621-RJ et donc pouvoir répéter chaque caractère indéfiniment comme par exemple :
99550033662211--RRJJ et uniquement eux.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
25 août 2014 à 19:51
Bonsoir,

comme Uc essaye de te le dire tu as une solution avec l'opérateur Like, hérité de VB6 si tu as référencé Visual Basic dans ton projet. En buchant un peu MSDN tu devrais t'en sortir.
Sinon, comme tu l'avais pensé au départ, tu peux écrire une Regex (plus .Net dans l'absolu....)
Il y a ici, une source en C#, qui permet d'essayer ses Regex, de plus, sur le coté un rappel des principales instructions.

0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
25 août 2014 à 21:29
En cours de frappe tu peux aussi utiliser un select case, puisque tu as assez peu de caractères autorisés
Select Case toto
	Case "A", "B"
		'ici le code pour A et B

	Case Else
		'ici le code pour le reste
End Select
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
25 août 2014 à 20:49
Bonjour,
Perso.. j'utilise des sites en ligne pour tester mes regex
Par exemple :
http://www.myregextester.com/index.php

Ce qui me permet d'obtenir (généré par le site directement):
VB.NET Code Example:
Imports System.Text.RegularExpressions
Module Module1
  Sub Main()
    Dim sourcestring as String = "replace with your source string"
    Dim re As Regex = New Regex("^[9503621\-RJ]*$",RegexOptions.Multiline)
    Dim mc as MatchCollection = re.Matches(sourcestring)
    Dim mIdx as Integer = 0
    For each m as Match in mc
      For groupIdx As Integer = 0 To m.Groups.Count - 1
        Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames(groupIdx), m.Groups(groupIdx).Value)
      Next
      mIdx=mIdx+1
    Next
  End Sub
End Module


Ce qui donne comme résultat :
$matches Array:
(
[0] => Array
(
[0] => 99550033662211--RRJJ
)

)
Pour la chaine de caractères :
99550033662211--RRJJ

Mais qui me donne :
NO MATCHES.

Pour la chaine :
OPr77861122_-XDJ
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
26 août 2014 à 10:07
Bonjour Sinsitrus,

Je vous suggère d'examiner le petit code suivant,
Public Class Form1
Private Ok As Boolean

Private Sub Accueil_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Ok = "9503621-RJ".Contains("5") : MessageBox.Show(Ok.ToString)
Ok = "9503621-RJ".Contains("4") : MessageBox.Show(Ok.ToString)
End Sub

End Class

Cordialement.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
26 août 2014 à 10:45
Merci à tous pour vos réponses.

Donc si je comprends bien, ucfoutu essais de me faire comprendre et vous tous, que je peux trouver une chaine de caractère que j'ai écris dans un textbox valide ou pas.
C'est pour quoi je dois utiliser
Like
ou
case
ou
regex
!

Merci à tous de votre aide et principalement à toi ucfoutu pour ton aide et ton soutiens.
Je me suis peut-être mal expliqué hier, mais "autoriser que quelques caractères" est comme la valeur "ne contient que" (je voulais dire). Il agira un peux comme une valeur IsNumeric lorsqu'on écrit du texte, ça ne passera pas, mais on peux écrire autant de chiffre qu'on le souhaite. Ma textebox ne peut que recevoir que les caractères cités ou souhaités.

Voilà pourquoi j'ai proposé ce bout:
Private Sub TextBox9_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox9.KeyPress
        If InStr("9503621-RJ", e.KeyChar) = 0 And e.KeyChar <> vbBack Then e.Handled = True
End Sub


----------
J'ai débuté VB10 depuis le 25/08/2014
OS            : Windows 7 Pro 64 Bit
Plateforme    : Visual Studio 2010
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 août 2014 à 11:35
Chaque solution proposée peut t'amener à ce résultat....
Masi si on fait tout le travail pour toi, tu ne progresseras pas.
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
Modifié par jordane45 le 26/08/2014 à 12:13
Bonjour,

Je ne comprend pas où se trouve la difficulté.... avec tout ce qu'on t'a donné comme infos/exemples.....

enfin bon...
Que penses tu de :

Imports System.Text.RegularExpressions
Public Class Form1

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim sourcestring As String = Me.TextBox1.Text
        Dim re As Regex = New Regex("^[9503621\-RJ]*$")
        Dim mc As Match = re.Match(sourcestring)
        If mc.Success Then
            'saisie OK
            Console.WriteLine(mc.Value & " =>> OK")
        Else
            'Saisie KO
            Console.WriteLine("Saisie Fausse")
        End If


    End Sub
End Class



=> A toi de gérer ensuite... lorsque la saisie est fausse ... de faire ce que tu souhaites... comme supprimer le caractère que tu viens de saisir par exemple...

Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
Rejoignez-nous