2

フーボーイ。私が推測する奇妙なもの!

フォームから入力を取得し、xmlを作成するためのphpスクリプトに送信する前に、西洋文字、句読点、または数字がないことを確認したいと思います...

フォーム名から="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,'');

--->テキストは.ajaxを使用してphpスクリプトに送られます

ただし、日本語は正規表現に到達する前にASCIIに変換されています。

例えば。あああは%E3%81%82%E3%81%82%E3%81%82になります

助言がありますか?

4

1 に答える 1

1

次のように、シリアル化する前に、それを交換して入力を変更します。

$('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....
});

これは.val()、シリアル化の前に正規表現に基づいて古い値を取得して置き換えるために使用されます(さらに重要なことにencodeURIComponent()、そこで呼び出されます)。


.serialize()もう1つの方法は、次のように、手順の途中で自分で正規表現を実行することです。

$('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()実際には$.param($(this).serializeArray())、ここで分割し、それぞれで正規表現を作成して実行する配列内value{name:'name',value:'value'}オブジェクトペアを取得するだけです。.serializeArray()その後$.param()、文字列としてシリアル化するために、変更された配列(西部文字なし)を渡します。

于 2010-08-20T11:48:51.053 に答える