Ho esaminato Stack Overflow ( sostituendo i caratteri ... eh , come JavaScript non segue lo standard Unicode relativo a RegExp , ecc.) E non ho davvero trovato una risposta concreta alla domanda:
How can JavaScript match for accented characters (those with diacritical marks)?
Sto forzando un campo in un'interfaccia utente per abbinare il formato: last_name, first_name
(ultimo [spazio virgola] prima) , e voglio fornire supporto per i segni diacritici, ma evidentemente in JavaScript è un po 'più difficile di altre lingue / piattaforme.
Questa era la mia versione originale, fino a quando non ho voluto aggiungere il supporto diacritico:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Attualmente sto discutendo di uno dei tre metodi per aggiungere supporto, tutti testati e funzionanti (almeno in una certa misura, non so davvero quale sia la "misura" del secondo approccio). Eccoli:
Elenco esplicito di tutti i personaggi accentati che vorrei accettare come validi (zoppi e eccessivamente complicati):
var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
// Build the full regex
var regex = "^[a-zA-Z" + accentedCharacters + "]+,\\s[a-zA-Z" + accentedCharacters + "]+$";
// Create a RegExp from the string version
regexCompiled = new RegExp(regex);
// regexCompiled = /^[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+,\s[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Ciò corrisponde correttamente a un cognome / nome con uno dei caratteri accentati supportati in
accentedCharacters
.
Il mio altro approccio era usare la .
classe di caratteri, per avere un'espressione più semplice:
var regex = /^.+,\s.+$/;
- Questo sarebbe partita per qualsiasi cosa, almeno sotto forma di:
something, something
. Va bene, suppongo ...
L'ultimo approccio, che ho appena trovato, potrebbe essere più semplice ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Corrisponde a una serie di personaggi unicode - testati e funzionanti, anche se non ho provato nulla di folle, solo le cose normali che vedo nel nostro dipartimento linguistico per i nomi dei membri della facoltà.
Ecco le mie preoccupazioni:
- La prima soluzione è troppo limitante, sciatta e contorta in questo. Dovrebbe essere cambiato se dimenticassi un personaggio o due, e questo non è molto pratico.
- La seconda soluzione è migliore, concisa, ma probabilmente corrisponde molto più di quanto dovrebbe effettivamente. Non sono riuscito a trovare una vera documentazione su esattamente ciò che
.
corrisponde, solo la generalizzazione di "qualsiasi carattere tranne il carattere di nuova riga" (da una tabella sulla MDN ). La terza soluzione sembra essere la più precisa, ma ci sono dei problemi? Non ho molta familiarità con Unicode, almeno in pratica, ma guardando una tabella di codici / continuazione di quella tabella ,
\u00C0-\u017F
sembra essere abbastanza solido, almeno per il mio input previsto.- La facoltà non invierà moduli con i loro nomi nella loro lingua madre (ad esempio, arabo, cinese, giapponese, ecc.), Quindi non devo preoccuparmi di caratteri fuori dal latino
Quindi le vere domande : quale di questi tre approcci è più adatto al compito? O ci sono soluzioni migliori?
.
atomo corrisponde a tutto tranne che alle nuove linee " in realtà è abbastanza esatto :-)
regex = /^[^,]+,\s[^,]+$/;
per impedirlo.