2012-10-16 14 views
7

Questo è all'interno di un file xaml.Come mascherare l'input tramite espressioni regolari? 1112223333 o 1112223333444

Ho bisogno di mascherare l'input di una casella con un'espressione regolare.

ho bisogno di contenere sia 10 numeri o 13 numeri (in sequenza, senza simboli)

ho:

<... ValidationRegEx="\d{13}" /> 

che funziona bene, ma quando voglio aggiungere una maschera di dieci, si rompe:

<... ValidationRegEx="\d{13} | \d{10}" /> 

Tutte le idee?

+6

spazi nel secondo Regex? –

+2

Forse rimuovere lo spazio prima e dopo "|" ? –

+2

Si prega di aggiornare la domanda/i tag per riflettere che questa domanda riguarda XAML, non C#. Probabilmente i frammenti di codice dovrebbero anche essere XAML, non C# – JDB

risposta

0

Questo è ciò che ha funzionato per me:

< ... RegEx="\b\d{10}\b|\b\d{13}\b" ... /> 

Questo rappresenta "trovare una parola intera con 10 cifre o trovare un mondo intero con 13 cifre".

il \ b davanti e dietro la regex significa trovare l'intera parola.

Dai un'occhiata a questo sito di tutorial che mi ha aiutato rispondere alla mia domanda:

http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial

+1

Grazie per il link per mostrare come hai ottenuto la risposta. – neontapir

+0

@ Ωmega, non è affatto sbagliato. si noti \ d, che indica la cifra. –

+0

Sbagliato! Sbagliato! Sbagliato! Provalo! –

8

I sottili degli spazi deve essere rimosso, in questo modo:

ValidationRegEx = "\d{13}|\d{10}" 

In caso contrario, i caratteri di spazio diventano parte della stringa che si corrispondono (vale a dire 13 cifre seguite da uno spazio o uno spazio seguito da dieci cifre).

Si potrebbe anche provare a semplificare l'espressione in questo modo:

ValidationRegEx = "\d{10}\d{3}?" 

(il termine di dieci più tre cifre opzionali).

+0

cosa intendi con doppio taglio per rendere validi i letterali stringa C#? Qual è la differenza tra \\ d {10} \\ d {3}? e \ d {10} \ d {3}? ? –

+2

@ jordan.peoples \ è un personaggio di escape. A \\ sfugge alla fuga. –

+1

@ jordan.peoples Se crei una stringa letterale con una barra singola davanti a '" \ d "', [non si compila] (http://ideone.com/3ZxWG) con il seguente errore: "Non riconosciuto sequenza di escape '\ d '". Un'alternativa sarebbe usare un letterale letterale '@" \ d {13} | \ d {10} "' con il segno at '@'. – dasblinkenlight

0
       ┌─────┬─ 10 or 13 digits 
           ↓  ↓ 
ValidationRegEx = "(?<!\d)\d{10}\d{3}?(?!\d)" 
         ↑     ↑ 
         │     └─ negative lookahead to ensure 
         │     there is no other digit ahead 
         │ 
         └─ negative lookbehind to ensure 
          there is no other digit behind 
+0

è complicato. prova questo: "\ b \ d {10} \ b | \ b \ w {13} \ b" –

+0

@ jordan.peoples - La tua soluzione pubblicata nel commento è errata. Ad ogni modo ... Volevo pubblicare una soluzione alternativa usando i lookaround, così alcuni utenti possono imparare questa fantastica funzionalità. Se volessi usare i limiti, andrei con il pattern '\ b \ d {10} \ d {3}? \ B'. –

+0

il mio modo funziona bene. è corretto e testato già dal team di controllo qualità. –