从表单获取输入,我想确保在将它发送到php脚本以创建一些xml之前没有西方字符,标点符号或数字...
来自表格名称=“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
有什么建议吗?
答案 0 :(得分: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()
步骤中自己执行正则表达式,如下所示:
$('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'}
对象对{{1}} 3}}在每个上创建并运行正则表达式。之后,我们将更改后的数组(西方字符)传递给.serializeArray()
,以序列化为字符串。