Manipolazione del giapponese con Jquery.serialize ();
-
30-09-2019 - |
Domanda
Hoo. Una strana uno immagino!
avere un input da un modulo, voglio fare che non vi siano caratteri occidentali, punteggiatura o numeri prima di inviarlo ad uno script PHP per la creazione di alcuni xml ...
dal form name = "a"
$('form').submit(function() {
text = ($(this).serialize());
text = text.substr(2,text.length)
text = text.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,'');
---> il testo va a script php usando .ajax
Tuttavia, i giapponesi è stato convertito in ASCII prima che arrivi alla regex!
ad es.? ? ? diventa% E3% 81% 82% E3% 81% 82% E3% 81% 82
Qualche suggerimento?
Soluzione
Vorrei scambiare intorno e cambiare gli ingressi prima di serializzazione, in questo modo:
$('form').submit(function() {
$(this).find(':text, textarea').val(function(i, v) {
return v.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,'');
});
var text = ($(this).serialize());
//submit form....
});
Questo utilizza .val()
per ottenere e sostituire il vecchio valore in base alla regex prima della serializzazione ( e ancora più importante, encodeURIComponent()
viene chiamato in là).
Un'altra alternativa è fare la regex nel bel mezzo delle fasi .serialize()
, come questo :
$('form').submit(function() {
var arr = $(this).serialzeArray();
$.each(arr, function() {
this.value = this.value.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,'');
});
var postData = $.param(arr);
});
.serialize()
è in realtà solo $.param($(this).serializeArray())
quindi tutto quello che stiamo facendo è la divisione in su qui, presa la value
delle coppie oggetto {name:'name',value:'value'}
nella matrice che .serializeArray()
crea e l'esecuzione del regex su ciascuno. Dopo di che stiamo passando l'array modificato, western-carattere-meno a $.param()
per ottenere serializzato come stringa.