Domanda

ragazzo

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top