如何在表单提交时通过jQuery阻止西里尔文unicode



在我的网站上,我收到了一些订阅垃圾邮件。所有这些都来自使用俄语字母输入姓名的人。

我知道在这种情况下,最推荐的做法是在我的订阅页面表单中放置验证码。但是,由于这种情况非常具体,同时我不想影响我的真实客户体验,因此我第一次想要一个jQuery脚本,当在某些输入中检测到俄语字母时,它会拒绝表单提交。有人可以帮我吗?(或者使用PHP更好吗?

简单表单示例

<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>  

更具体地说。例如,在输入字符串中检测西里尔字符的脚本,例如:"John Потоцкая Doe",然后避免表单提交。

提前非常感谢。

我会使用一个正则表达式范围来匹配所有西里尔文 unicode 范围:

let pattern  /[u0400-u04FF]/;
if (pattern.test("John Потоцкая Doe")) console.log("cyrillic");
else console.log("not cyrillic");

相关问题

您的代码最终将如下所示:

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>

您可以在此处查看西里尔字符在Unicode空间中的位置:

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;
}
}

正则表达式可能有一种更简单的方法,例如,给出拉丁字母的范围/[A-Za-z]/可能类似于通用 Unicode 代码点。

编辑

对于 ES5 Array 原型方法,这可能稍微干净一些,例如,单行代码将是:

let cyrillic = str.split('').some(char => char.codePointAt(0) >= 0x0400 && char.codePointAt(0) <= 0x052f);

最新更新