在我的网站上,我收到了一些订阅垃圾邮件。他们都是使用俄语字母输入姓名的人。
我知道在这种情况下,最推荐做的是在我的订阅页面表单中放入一个验证码。但是,由于这种情况非常具体,同时又不想影响我的真实客户体验,因此我第一次希望使用一个jQuery脚本,当在某些输入中检测到俄语字母时,该脚本会拒绝提交表单。有人可以帮我吗? (或者最好使用PHP?)
<form action="#" id="form-validate">
<input type="text" class="input" id="firstname">
<button class="submit">teste</button>
</form>
更具体。例如,一个脚本会检测输入字符串中的西里尔字母,例如:“ JohnПотоцкаяDoe”,然后避免表单提交。
非常感谢。
答案 0 :(得分:2)
我会使用一个正则表达式范围,该范围可以满足所有西里尔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>
答案 1 :(得分:1)
您可以在此处看到斯拉夫字母在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);