2012-01-19 9 views
9

Problema semplice: un progetto esistente consente di aggiungere campi aggiuntivi (con controlli aggiuntivi su tali campi come espressioni regolari) per supportare moduli di input personalizzati. E ho bisogno di aggiungere un nuovo modulo ma non posso cambiare il funzionamento di questo progetto. Questo modulo consente al visitatore di inserire il suo nome e cognome più le iniziali. Quindi il RegEx ^[a-zA-Z.]*$ ha funzionato bene per ora.
Poi qualcuno ha notato che non avrebbe accettato caratteri diacritici come input. Un nome turco come Ömür non è stato accettato come valido. Deve essere accettato, però.Controllo diacritici con un'espressione regolare

Così ho due opzioni:

  1. rimuovere completamente il controllo, che consentirebbe agli utenti di inserire spazzatura.
  2. Scrivere un'espressione regolare che includa anche lettere diacritiche, ma senza cifre, spazi o altre lettere.

Poiché non riesco a modificare il codice del progetto, ho solo queste due opzioni. Preferirei l'opzione 2, ma ora mi chiedo quale dovrebbe essere il corretto RegEx. (Il progetto è scritto in C# 4.0.)

+0

Che cosa hai intenzione di fare di qualcuno che modifica legalmente la forma scritta del loro nome in sequenza di caratteri "42 79"? Alcune persone fanno cose stupide del genere ... –

+0

Beh, qualcuno chiamato "42 79" sarebbe stato inserito come "Fourtytwo Zeventynine". :-) Inoltre, non tutti i paesi permettono ai loro cittadini di essere così stupidi. :-) –

+1

Lasciando da parte il regolamento locale, se il mio nome era "42 79" e qualcuno lo ha inserito in qualche Poxy DB come "Fourtytwo Zeventynine", richiederei che cambiassero il loro DB in quanto sarebbe _formalmente_ scorretto. Più precisamente, le persone hanno nomi di famiglia composti da più parole (che potrebbero essere o meno facili da capitalizzare) e nomi di famiglia con apostrofi (comuni nei cognomi irlandesi) e una miriade di altre cose. I nomi sono difficili da convalidare. –

risposta

21

È possibile utilizzare l'uscita specifica Unicode per le lettere - \p{L} (questo includerà i A-Za-z range):

^[.\p{L}]*$ 

Trova sulla regularexpressions.info:

\ p {L} o \ p {Letter}

Corrisponde a un singolo punto di codice Unicode con la proprietà "lettera". Vedere Proprietà dei caratteri Unicode nel tutorial per un elenco completo delle proprietà. Ogni punto di codice Unicode ha esattamente una proprietà. Può essere utilizzato all'interno di classi di caratteri.

+1

Se si aggiunge '\ p {L}' alla classe di caratteri, è possibile rimuovere 'a-zA-Z'. – stema

+0

@stema - Buona cattura. Risposta aggiornata – Oded

+0

Bella soluzione! Problema risolto. –

Problemi correlati