2009-07-06 17 views
5

Voglio convalidare la stringa che contiene solo numeri. Facile convalida? Ho aggiunto RegularExpressionValidator, con ValidationExpression = "/ d +".RegularExpressionValidator non si attiva sulla voce white-space

Sembra ok, ma nulla convalida quando è inserito solo lo spazio! Anche molti spazi sono convalidati ok. Non ho bisogno che questo sia obbligatorio.

Posso tagliare sul server, ma l'espressione regolare non può fare tutto!

risposta

11

Questo è di progettazione e tende a buttare via molte persone. RegularExpressionValidator non rende obbligatorio un campo e consente di essere vuoto e accetta spazi bianchi. Il formato \ d + è corretto. Anche usando^\ d + $ si otterrà lo stesso problema di consentire spazi bianchi. L'unico modo per forzare questo a disabilitare lo spazio bianco è anche includere un RequiredFieldValidator per operare sullo stesso controllo.

Questo è per la RegularExpressionValidator documentation, che afferma:

validazione ha esito positivo se il controllo di input è vuoto. Se è richiesto un valore per il controllo di input associato , utilizzare un controllo RequiredFieldValidator oltre al controllo di RegularExpressionValidator .

Un controllo di espressione regolare del campo nel code-behind funzionerebbe come previsto; questo è solo un problema con RegularExpressionValidator. Quindi potresti usare un CustomValidator invece e dire args.IsValid = Regex.IsMatch(txtInput.Text, @"^\d+$") e se contenesse spazi vuoti restituirebbe falso. Ma se questo è il motivo per cui non basta usare il RequiredFieldValidator per la documentazione ed evitare di scrivere codice personalizzato? Inoltre, CustomValidator indica un postback obbligatorio (a meno che non si specifichi uno script di convalida del client con espressioni repressive javascript equivalenti).

+1

tutti gli spazi bianchi sono considerati vuoti? sembra che l'assetto sul server sia la risposta. –

+0

Sì, lasciare vuoto o aggiungere spazi bianchi è lo stesso. Una volta che un personaggio è stato inserito, il validatore si innescherà, quindi l'inserimento di "10" è valido. Puoi tenerlo così com'è, sapendo che qualsiasi cosa lo faccia sarà un numero o uno spazio bianco valido. In entrambi i casi, ritaglia il tuo valore. –

+1

grazie Ahmad. Vorrei che i documenti MSDN dicessero "tutti gli spazi vuoti sono vuoti"! –

1

La tua domanda è un po 'difficile da seguire, ma se ti stai chiedendo come scrivere un expresion regolare che solo accetta le cifre Credo che il tuo errore sia l'uso della barra in avanti invece del backslash. Prova

"\d+"

+0

sì, ho provato. lasciami provare a spiegare. immissione nella casella di testo: "55" - valido. "55x" - fallisce (questo è buono). "" - valido! (non così buono!) –

+0

Ok, nel tuo esempio hai detto che hai usato "/ d +" che è molto diverso da "\ d +" in regex. Hai provato ad aggiungere anche RequiredFieldValidator? Questo potrebbe impedire che il "" sia legale. Non positivo al 100%, non pretendo di essere un esperto di asp.net;) – Scanningcrew

0

Prova utilizzando^\ d + $ per forzare le cifre per riempire l'intera linea. ^ = inizio riga $ = fine linea

+0

IIRC, il^e $ sono impliciti quando si utilizza un validatore Regex. – Cerebrus

+0

L'ho "assunto" io stesso, ma sono stato morso da partite inaspettate in passato. Oh, aspetta, quello è puro RegEx. Non sono sicuro del validatore. –

1

RegularExpressionValidator è un buon wrapper per eseguire controlli regex ma non si convalida con un controllo vuoto. È possibile utilizzare CustomValidator e quindi eseguire il controllo delle espressioni regolari in una funzione javascript allegata al validatore.

Verrà convalidato con un controllo vuoto (vuoto) finché si imposta la proprietà ValidateEmptyText su true.

Ulteriori informazioni su CustomValidators su MSDN here sono disponibili.

+0

Per aggiungere a questo, mentre uno script client può essere utilizzato con un CustomValidator, sarebbe saggio includere anche la convalida lato server per coprire tutte le basi. –

Problemi correlati