2011-09-10 20 views
8

Sto cercando un'espressione regolare Javascript per essere sicuro che la stringa contenga solo spazi, lettere e ñ - caso insensibili.Javascript regex per accettare solo lettere, spazi e ñ

Ho già provato: /^[A-Za-z _]*[A-Za-z][A-Za-z _]*$/ ma non riesce ad accettare ñ.

+0

Ho provato:/^ [A-Za-z _] * [A-Za-z] [A-Za-z _] * $/- Ma questo non accetta valori. –

+0

Ok, sembra che la tua domanda riguardi davvero come gestire i caratteri non ASCII nelle regex. –

+1

Sì, perché ho solo bisogno di un valore ASCII in questo caso - –

risposta

11
/^[ñA-Za-z _]*[ñA-Za-z][ñA-Za-z _]*$/ 

e

/^[\u00F1A-Za-z _]*[\u00F1A-Za-z][\u00F1A-Za-z _]*$/ 

dovrebbe funzionare.

Javascript regex supporta \u0000 attraverso \uFFFF.

+0

La tua risposta ha aiutato molto! Grazie –

+3

Questo è fondamentalmente errato in quanto non gli hai detto di eseguire i suoi dati attraverso una conversione NFC prima. Se non lo fa, questi schemi non funzionano. Sono abbastanza sicuro che vuole davvero '[aábcdeéfghijklmnñoópqrstuúüvwxyzAÁBCDEÉFGHIJKLMNÑOÓPQRSTUÚÜVWXYZ]' per l'alfabeto spagnolo, ma funzionerà solo se i dati NFC sono !! – tchrist

4

Se si desidera semplicemente quel carattere, inserirlo nel Regex, ad esempio [A-Za-zÑñ ]. In caso contrario, utilizzare una libreria Regex con conoscenza Unicode per JavaScript come http://xregexp.com/. Purtroppo, JS Regexes non supporta classi di caratteri compatibili con Unicode (come \p{L} in C#gex)

+0

C# ti fa effettivamente scrivere '\ p {L}' invece di solo '\ pL' ????? Questo è davvero stupido, perché triplica la lunghezza dello specificatore per i 7 casi più comuni. Questo è un fallimento di Huffman. Qualcuno non era molto intelligente. È necessario rendere '\ pL' solo un po 'più difficile da scrivere rispetto a' \ w'. Altrimenti la gente non la userà. '\ p {L}' è un bug di progettazione. – tchrist

+0

@tchrist MA alla fine è meno del doppio della "espressione". '\ p {L}' è di 5 caratteri e \ pL è 3. Sì, \ pL sarebbe meglio, ma penso che supportare i caratteri non BMP e \ X sarebbe MOLTO più importante :-) – xanatos

1

È necessario utilizzare una classe di caratteri.

/[A-Za-z ñ]+/ 
Problemi correlati