如何在表单提交时通过 jQuery 阻止西里尔语 unicode
How to block Cyrillic unicode by jQuery on form submit
在我的网站上,我收到了一些订阅垃圾邮件。所有这些都来自使用俄语字母输入名字的人。
我知道在这种情况下,最推荐的做法是在我的订阅页面表单中输入验证码。但是,由于这种情况非常具体,同时我不想影响我的真实客户体验,所以我第一次想要一个 jQuery 脚本,当检测到俄语时拒绝表单提交一些输入中的字母表。有人可以帮我吗? (或者最好使用 PHP?)
<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>
更具体一点。例如,检测输入字符串中的西里尔字符的脚本,如:"John Потоцкая Doe",然后避免表单提交。
非常感谢。
您可以在此处查看西里尔字符在 Unicode space 中的位置:
https://en.wikipedia.org/wiki/Cyrillic_script_in_Unicode
然后逐个字符循环查看是否有任何字符落在该范围内,例如:
let str = 'Україна';
let cyrillic = false;
for (let i = 0; i < str.length; i++) {
if (str.codePointAt(i) >= 0x0400 && str.codePointAt(i) <= 0x052f) {
cyrillic = true;
}
}
使用正则表达式可能有更简单的方法,例如range /[A-Za-z]/
给出拉丁字母,可能与一般 Unicode 代码点类似。
编辑
对于 ES5 数组原型方法,这可能会稍微干净一些,例如一行将是:
let cyrillic = str.split('').some(char => char.codePointAt(0) >= 0x0400 && char.codePointAt(0) <= 0x052f);
我会使用覆盖所有西里尔文 unicode 范围的正则表达式范围:
let pattern /[\u0400-\u04FF]/;
if (pattern.test("John Потоцкая Doe")) console.log("cyrillic");
else console.log("not cyrillic");
Relevant SO Question
您的代码最终将如下所示:
let pattern = /[\u0400-\u04FF]/;
$(document).ready(function() {
$('#form-validate').submit(function() {
if (pattern.test($('input#firstname').val())) { //If "input" contains a Cyrillic character...
alert('Invalid input: please use Latin characters only.'); // pop alert message
$('input#firstname').val("") // empty field of invalid contents
return false; // prevent form from submitting
} else
return true; // allow form to be submitted
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>
在我的网站上,我收到了一些订阅垃圾邮件。所有这些都来自使用俄语字母输入名字的人。
我知道在这种情况下,最推荐的做法是在我的订阅页面表单中输入验证码。但是,由于这种情况非常具体,同时我不想影响我的真实客户体验,所以我第一次想要一个 jQuery 脚本,当检测到俄语时拒绝表单提交一些输入中的字母表。有人可以帮我吗? (或者最好使用 PHP?)
<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>
更具体一点。例如,检测输入字符串中的西里尔字符的脚本,如:"John Потоцкая Doe",然后避免表单提交。
非常感谢。
您可以在此处查看西里尔字符在 Unicode space 中的位置:
https://en.wikipedia.org/wiki/Cyrillic_script_in_Unicode
然后逐个字符循环查看是否有任何字符落在该范围内,例如:
let str = 'Україна';
let cyrillic = false;
for (let i = 0; i < str.length; i++) {
if (str.codePointAt(i) >= 0x0400 && str.codePointAt(i) <= 0x052f) {
cyrillic = true;
}
}
使用正则表达式可能有更简单的方法,例如range /[A-Za-z]/
给出拉丁字母,可能与一般 Unicode 代码点类似。
编辑
对于 ES5 数组原型方法,这可能会稍微干净一些,例如一行将是:
let cyrillic = str.split('').some(char => char.codePointAt(0) >= 0x0400 && char.codePointAt(0) <= 0x052f);
我会使用覆盖所有西里尔文 unicode 范围的正则表达式范围:
let pattern /[\u0400-\u04FF]/;
if (pattern.test("John Потоцкая Doe")) console.log("cyrillic");
else console.log("not cyrillic");
Relevant SO Question
您的代码最终将如下所示:
let pattern = /[\u0400-\u04FF]/;
$(document).ready(function() {
$('#form-validate').submit(function() {
if (pattern.test($('input#firstname').val())) { //If "input" contains a Cyrillic character...
alert('Invalid input: please use Latin characters only.'); // pop alert message
$('input#firstname').val("") // empty field of invalid contents
return false; // prevent form from submitting
} else
return true; // allow form to be submitted
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>