2010-06-01 19 views
9

Quale espressione regolare posso usare per abbinare (permettere) qualsiasi tipo di lettera da qualsiasi lingua.net espressioni regolari per abbinare qualsiasi tipo di lettera da qualsiasi lingua

ho bisogno per adattarsi a qualsiasi lettera comprese eventuali segni diacritici (ad esempio un , ü, ñ, ecc.) ed esclude qualsiasi tipo di simbolo (simboli matematici, simboli di valuta, dingbat, caratteri di disegno a scatola, ecc.) e caratteri di punteggiatura.

Sto usando asp.net MVC 2 con .net 4. Ho provato questa annotazione a mio avviso il modello:

[RegularExpression(@"\p{L}*", ... 

e questo:

[RegularExpression(@"\p{L}\p{M}*", ... 

ma lato client la convalida non funziona.

UPDATE: Grazie per tutte le vostre risposte, i vostri suggerimenti funzionano ma solo per .NET e il problema qui è che usa anche l'espressione regolare per la convalida lato client con JavaScript (scusate se questo non fosse abbastanza chiaro) . dovevo andare con:

[^ 0-9_ \ | ° ¬ # \ $%/\() \ ¡¿+ {} []:!?. \,; @ ª^* <> = &] *

che è molto brutto e non copre tutti gli scenari ma è la cosa più vicina a ciò di cui ho bisogno.

+0

Cosa intendi "Non funziona"? Questa non è una descrizione molto concisa del problema. –

+0

beh, non funziona significa che non convalida ciò che ho bisogno di convalidare, o cosa dovrebbe convalidare (vedi il link di Lukas), ma per essere più specifico qualunque cosa l'ho messo non convalida – pedro

+0

Funziona per te? o hai una regex alternitaveave per questo? – pedro

risposta

1

Una cosa da tenere a mente è la regex sul lato client. Usa regex javascript sul lato client e regex .net sul lato server. Javascript non supporterà questo scenario.

0

\ w - corrisponde a qualsiasi carattere alfanumerico (compresi i numeri)

Nel mio test è abbinato:

  • Ã
  • à
  • ç
  • z

e non corrisponde:

  • ;
  • ,
  • \
  • :

Nel caso in cui si sa esattamente cosa si vuole escludere (come un po 'di lista) si cand effettuare le seguenti operazioni:

[^;, \ ` .]

che corrisponde a una volta ogni carattere che isnt:

  • ;
  • ,
  • \
  • `
  • .

Spero che aiuti!

+1

'\ w' corrisponderà anche a' _' – Senseful

+0

@eagle hmm .. hai ragione, almeno ho dato un'alternativa. Verificarlo anche se – Marcelo

+0

\ w - sta per Word. Non lettera –

1

\p{L}* deve corrispondere "a qualsiasi tipo di lettera da qualsiasi lingua". Dovrebbe funzionare, l'ho usato in un uppercase/lowercase recognition regex i18n-proof in .NET.

+0

Quindi il problema potrebbe essere più specifico di quanto pensassi, aggiornerò la domanda – pedro

5

ignorare il tuo insegnante di grammatica e utilizzare doppie negazioni:

[^\W\d_] 

Ricordate che \w partite qualsiasi lettera, cifra, o sottolineano, in modo da escludere come sopra. Potresti leggerlo come "non un carattere-non-parola, non una cifra e non un trattino basso" - che lascia solo le lettere. Applicare il teorema di De Morgan, ed ha più senso: “una parola caratteri ma né una cifra nè una sottolineatura”

4

È possibile utilizzare Char.IsLetter:

Indica se il carattere Unicode specificato è classificato come un Unicode lettera.

con .Net 4.0:

string onlyLetters = String.Concat(str.Where(Char.IsLetter)); 

Su 3,5 String.Concat eccettua solo un array, così si dovrebbe anche chiamare ToArray.

+1

+1 meglio con Char.IsLetter che regex :) – Christian

+0

Questo non risponde alla domanda, non necessariamente la domanda è di risolvere un problema, forse è stato fatto per imparare REGEX, non lo so. Ok, potrebbe essere un problema, ma chiede in particolare come farlo con espressioni regolari (attraverso la domanda, un tag e persino il titolo), che è chiaramente ottenibile. +1 per risolvere il 'problema', -1 per non aver risposto alla domanda. Neutro. – Marcelo

+0

Che non funziona "sul lato client" – GvS

2

Il tuo problema è più probabile che devi solo avere uno alfa-char, perché l'espressione regolare corrisponderà a qualsiasi cosa abbia almeno un carattere.

Aggiungendo ^ come prefisso e $ come postfix, l'intera frase deve essere conforme alla propria espressione regolare. Quindi questo prob funziona:

^\p{L}*$ 

RegexBuddy spiega: posizione

  1. ^ Assert all'inizio della stringa
  2. \p{L} Un personaggio con la proprietà Unicode 'lettera' (qualsiasi tipo di lettera da ogni tipo della lingua) 2a. Tra zero e un numero illimitato di volte, il maggior numero possibile
  3. $ posizione (greedy) Assert alla fine della stringa
+0

'\ p {L}' è il vincitore = "Trova qualsiasi tipo di lettera da qualsiasi lingua" –

1

Ho appena avuto per convalidare un URL e ho scelto questa espressione regolare in .NET.

^[(\p{L})?(\p{M})?-]*$ 

Inizia e termina con un carattere di qualsiasi lingua (opzionalmente lettere o segni) e consenti trattini.

Problemi correlati