2013-04-18 20 views
5

Ho un'applicazione che richiede alcune verifiche per alcuni campi. Uno di questi è per un cognome che può essere composto da 2 parole. Nella mia espressione regolare, devo accettare questi spazi così ho provato un sacco di cose ma non ho trovato alcuna soluzione.C# Regex - Accetta spazi in una stringa

Qui è la mia espressione regolare:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$" 

Il \s sono normalmente per gli spazi, ma non funziona e ho ottenuto questo messaggio di errore:

parsing "^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$" - Cannot include class \s in character range. 

Qualche idea ragazzi?

+1

Altro tema, ma dare un'occhiata a [proprietà Unicode] (http://www.regular-expressions.info/unicode.html#prop). '\ p {L}', corrisponde a una lettera in qualsiasi lingua, quindi la tua espressione sarà simile a '@"^[\ p {L} \ s] [\ p {L} \ s -] + $ "' è molto più bello e non devi pensare a ciascuna lettera speciale. – stema

risposta

9

- indica un intervallo di caratteri, proprio come si utilizzare A-Z per descrivere qualsiasi carattere tra A e Z. La vostra espressione regolare utilizza ñ-\s cui il motore cerca di interpretare come qualsiasi carattere tra N e \ s - e poi le comunicazioni, che \s non fa un sacco di senso lì, perché \s sé è solo un un'abbreviazione per qualsiasi carattere dello spazio bianco.

Ecco da dove viene l'errore.

per sbarazzarsi di questo, si dovrebbe sempre mettere - alla fine della vostra classe di caratteri, se si desidera includere il carattere letterale -:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\s-]+$" 

In questo modo, il motore sa che \s- non è un intervallo di caratteri, ma i due caratteri \s e - separatamente.

L'altro modo è quello di sfuggire il carattere -:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêç\-\s]+$" 

Così ora il motore interpreta ñ\-\s non come un intervallo di caratteri, ma come qualsiasi dei caratteri ñ, - o \s. Personalmente, anche se cerco sempre di evitare di scappare il più spesso possibile, perché IMHO ingombra e allunga inutilmente l'espressione in lunghezza.

+1

La fuga è meno fragile.Supponi di avere una classe di caratteri per le operazioni: '[+ -]'. Un altro programmatore può cambiarlo in '[+ - * /]', interrompendo il pattern. – Kobi

+0

Sono d'accordo, ma puoi discuterlo in ogni modo. Supponi di avere uno schema '[+ \ - *]' perché non puoi fare divisioni. Un giorno lo puoi fare, e un altro programmatore lo cambia in '[+/- *]' perché pensa che tu abbia appena preso la barra nel modo sbagliato. Fuori va la tua fuga. Quindi, questo non è davvero un argomento per nessuno dei modi. Valuto solo un po 'di leggibilità, specialmente in regex perché sono abbastanza complicati così com'è. –

+0

Grazie mille per la tua risposta! – Traffy

4

avete bisogno di sfuggire l'ultimo - carattere - ñ-\s viene analizzato come la gamma a-z:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\-\s]+$" 

Vedi anche su Regex Storm: [a-\s], [a\-\s]

0

[espressione regolare (@ "^ [a-zA-Z \ s] + $", ErrorMessage = "Solo i caratteri alfabetici e gli spazi sono consentiti.")]

questo funziona

Problemi correlati