如何通过jQuery在表单提交

时间:2018-08-29 19:30:00

标签: javascript jquery regex spam

在我的网站上,我收到了一些订阅垃圾邮件。他们都是使用俄语字母输入姓名的人。

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

Simple form exemple

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

更具体。例如,一个脚本会检测输入字符串中的西里尔字母,例如:“ JohnПотоцкаяDoe”,然后避免表单提交。

非常感谢。

2 个答案:

答案 0 :(得分:2)

我会使用一个正则表达式范围,该范围可以满足所有西里尔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>

答案 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);