regex voor controle textboxes

Status
Niet open voor verdere reacties.

verhaba

Gebruiker
Lid geworden
8 feb 2008
Berichten
79
Hallo
Is het mogelijk om reguliere expressies te gebruiken om de invoer van textboxes te controleren? Ik ben bezig met een form waar ik textboxen wil controleren. er zijn 4 verschillende soorten textboxen:
  1. één die enkel strings (a-z/A-Z) en spaties mag bevatten:
  2. één die enkel getallen mag bevatten;
  3. één die enkel een email mag bevatten.
  4. een laatste die strings en getallen, maar geen spaties en speciale tekens (&, @,#,...)
Wie kan me op weg helpen? Google geeft me tonnen links, maar de eerste pagina's geven me niet écht duidelijkheid. Hier en daar flarden.

Bedankt voor jullie hulp.
 
Invoercontrole

hi,

@matthijsk: Mensen die een deftig antwoord willen geven komen niet tot bij deze vraag omdat ze zien dat hier al op gereageerd is. Dat is jammer voor deze persoon want hij is echt voor geen meter geholpen met jou antwoord.

@ verhaba
Ik heb snel even wat code geschreven zodat het voor jou wat sneller kan gaan.
Merk op in men code dat ik heel eenvoudig kan controleren op geldige invoer door gebruik te maken van de statische functie van de klasse Char (Char.isLetter() Char.isNumber() ). Om te controleren op geldige email tekens, controleer ik gewoon of de String een '@' of een '.' bevat, deze methode kan je eventueel nog verder uitbreiden.

[CPP]
//using statements en namespace weggelaten...
//aan de variabelenaam van de Textboxen kan je zien over welke controle het gaat
public partial class form : Form
{
public const String EMAIL_TEKENS = "@.";
public form()
{
InitializeComponent();
}
//Deze eventhandler toegevoegd aan het event 'leave' van de 4 TextBoxen
//Alle buttons zijn nu disabled
private void nieuweInvoer(object sender, EventArgs e)
{
/*Alle invoervelden worden steeds gecontroleerd na het verlaten van 1 van de invoervelden
* hier krijgen we steeds true of false*/
stringsButton.Enabled = controleerLetters(stringsTextBox.Text);
getallenButton.Enabled = controleerCijfers(getallenTextBox.Text);
emailButton.Enabled = controleerEmail(emailTextBox.Text);
//Als het cijfers OF leters bevat, bij een speciaal teken zal geen van beide 'true returne'
stringsGetallenButton.Enabled = (controleerCijfers(stringEnGetallenTextBox.Text) || controleerLetters(stringEnGetallenTextBox.Text));
}

private Boolean controleerLetters(String woord)
{
if (woord == "") //deze controle is nodig want bij het verlaten van 1 vd velden wordt alles gecontroleerd
return false;
Boolean correct = true;
foreach (Char k in woord) {
if (!char.IsLetter(k))
correct = false ;
}
return correct;
}
private Boolean controleerCijfers(String woord)
{
if (woord == "")
return false;
Boolean correct = true;
foreach (Char k in woord)
{
if (!char.IsNumber(k))
correct = false;
}
return correct;
}
private Boolean controleerEmail(String woord)
{

if (woord.Contains(EMAIL_TEKENS[0])) //@
{
if (woord.Contains(EMAIL_TEKENS[1])) //.
{
return true;
}
}
return false;
}
}

[/CPP]
 
Het antwoord gaf ik aangezien hij aangaf gegoogled te hebben.

Hij gaf ook aan een regex validatie te willen gebruiken, en dat antwoord stond in de eerste link.

Voor het toepassen van regex validaties is een stukje discrete wiskunde wel handig. De oplossingen die jij geeft zijn wel heel erg omslachtig.

Hier een regex string voor de eerste controle: [^a-zA-Z*\s]

Wat doet deze controle: [a-zA-Z] zou er voor zorgen dat alle karakters van a tot en met z in zowel hoofd als kleine letters worden gematched. Maar je wil juist dat je controleert op andere karakters, dus om dat te doen plaatsen we er een ^ dit zorgt er voor dat hij alle karakters die niet overeen komen met a tot en met zet in hoofd en kleine letters weergeeft. Dus nu hebben we [^a-zA-Z] maar ook de spaties moeten nog worden geaccepteerd. In de termen van regex validaties kun je spaties zoals ze dat noemen "escapen'. Dit doe je met \s dus voegen we dat aan onze controle toe en dat geeft dus [^a-zA-Z*\s]

Nou moeten we dit nog toepassen in een C# regex controle:

[CPP]
public bool controle1(String invoer)
{
Regex _controle1 = new Regex("[^a-zA-Z*\s]");
return !_controle1.IsMatch(invoer);
}
[/CPP]

hopelijk ben je hier meer mee geholpen, zo kun je dus in twee regels code de controle doen.

Hier nog even de andere drie controles:

[^0-9] alleen nummers
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* E-mail adres
[^0-9a-zA-Z] en de laatste
 
Laatst bewerkt:
Dan heb ik de vraag verkeerd begrepen...mijn excuses daarvoor.

Op jouw manier kan het inderdaad veel korter, daar moet ik je wel gelijk in geven.
 
Lezen is ook een kunst :P Maar maakt niet uit, dit werkt in elk geval goed en is lekker kort idd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan