在我的网站上,我收到了一些订阅垃圾邮件。所有这些都来自使用俄语字母输入姓名的人。
我知道在这种情况下,最推荐的做法是在我的订阅页面表单中放置验证码。但是,由于这种情况非常具体,同时我不想影响我的真实客户体验,因此我第一次想要一个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);