Autoriser quelques caractères

Signaler
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
-
Messages postés
33711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 octobre 2021
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
Intéresse-toi à l'opérateur Like. Il devrait te permettre de faire facilement ce que tu veux faire.
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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 ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Non ! As-tu essayé ?
Ton code accepterait par exemple et entre autres "1111111111111111111111"
===>> utilise Like
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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 !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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 ?

Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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.
Messages postés
16351
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 octobre 2021
568
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.

Messages postés
16351
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 octobre 2021
568
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
Messages postés
33711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 octobre 2021
353
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
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
14
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.
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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
Messages postés
16351
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 octobre 2021
568
Chaque solution proposée peut t'amener à ce résultat....
Masi si on fait tout le travail pour toi, tu ne progresseras pas.
Messages postés
33711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 octobre 2021
353
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