使用 Jquery.serialize() 处理日语;

发布于 2024-09-15 10:19:58 字数 452 浏览 7 评论 0 原文

呼男孩。我猜是一个奇怪的人!

从表单获取输入,我想确保在将其发送到 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

有什么建议吗?

Hoo boy. A weird one I guess!

getting input from a form, I want to make sure there are no western characters, punctuation or numbers before sending it to a php script for creating some xml...

from 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,'');

---> text goes to php script using .ajax

However, the Japanese is being converted to ASCII before it gets to the regex!

eg. あああ becomes %E3%81%82%E3%81%82%E3%81%82

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

余生再见 2024-09-22 10:19:58

我会在序列化之前交换它并更改输入,如下所示:

$('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()< /code> 在序列化之前根据正则表达式获取并替换旧值(更重要的是, encodeURIComponent() 在那里被调用)。


另一种选择是在 .serialize()< 中间自行执行正则表达式/a> 步骤,如下所示:

$('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()) 所以我们要做的就是在这里将其拆分,获取 {name 的 value :'name',value:'value'} 数组中的对象对 。 serializeArray() 在每个数组上创建并运行正则表达式。之后,我们将更改后的数组(无西方字符)传递给 $.param( ) 序列化为字符串。

I would swap it around and change the inputs before serializing, like this:

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

This uses .val() to get and replace the old value based on the regex before the serialization (and more importantly, encodeURIComponent() gets called in there).


Another alternative is to do the regex yourself in the middle of the .serialize() steps, like this:

$('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() is really just $.param($(this).serializeArray()) so all we're doing is splitting it up here, taking the value of the {name:'name',value:'value'} object pairs in the array that .serializeArray() creates and running the regex on each. After that we're passing the changed array, western-character-less to $.param() to get serialized as a string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文