Utilizziamo l'eccellente validator plugin for jQuery qui su Stack Overflow per eseguire la convalida dell'input sul lato client prima che venga inviata al server.Problema di convalida JavaScript con caratteri internazionali
Generalmente funziona bene, tuttavia, questo ci fa graffiare la testa.
Il seguente metodo validatore viene utilizzato sul/modulo di risposta chiedere il campo del nome utente (si noti che è necessario essere disconnesso per vedere questo campo sul sito dal vivo: è in ogni pagina /question
e la pagina /ask
)
$.validator.addMethod("validUserName",
function(value, element) {
return this.optional(element) ||
/^[\w\-\s\dÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇßØøÅåÆæÞþÐð]+$/.test(value); },
"Can only contain A-Z, 0-9, spaces, and hyphens.");
Ora, questo regex sembra strano ma è abbastanza semplice:
- l'inizio della stringa (^)
- soddisfa una di queste ..
- carattere di parola (\ w)
- trattino (-)
- spazio (\ s)
- cifre (\ d)
- folli i caratteri delle lingue luna (AEIOU ecc)
- ora corrisponde alla fine della stringa ($)
Sì, abbiamo incontrato nel problema Internationalized Regular Expressions. La definizione JavaScript di "carattere parola" non include caratteri internazionali.
Ecco la parte strana: anche se abbiamo preso la briga di aggiungere manualmente tonnellate dei caratteri internazionali validi alla regex, lo non funziona. Non è possibile inserire questi caratteri internazionali nella casella di input per il nome utente senza ottenere il ..
può contenere solo A-Z, 0-9, spazi e trattini
.. ritorno convalida!
Ovviamente la convalida è lavorare per le altre parti del regex .. così .. cosa succede?
L'altra strana parte è che questa convalida funziona nella console JavaScript del browser ma non quando viene eseguita come parte del nostro standard * .js include.
/^ [\ w- \ sÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇßØøÅåÆæÞþÐð] + $/ .test ('ÓBill de hora') === vero
Abbiamo eseguito in alcuni problemi di caratteri internazionali davvero bizzarri in Codice JavaScript prima, con conseguente hack molto, molto brutto. Vorremmo capire cosa sta succedendo qui e perché. Per favore, illuminaci!
Questo potrebbe essere un problema di codifica dei caratteri? Ad esempio, una pazza luna "" proveniente dall'utilizzatore non è un "Ä" nella tua espressione regolare? – balpha
Non conosco la risposta, ma è un buon modo per scrivere una domanda. –
@Onorio Jeff difende sempre le domande ben scritte, quindi è meglio che lo faccia anche lui :-) Ma hai certamente ragione. – balpha