Как заблокировать кириллический юникод с помощью jQuery при отправке формы - PullRequest
0 голосов
/ 29 августа 2018

На моем сайте я получаю некоторые подписки на спам. Все они от людей, которые вводят свои имена, используя русский алфавит.

Я знаю, что в этом случае самое рекомендуемое, что нужно сделать, это вставить капчу в форму страницы моей подписки. Но, поскольку этот случай настолько специфичен, и в то же время я не хочу влиять на опыт моих реальных клиентов, в первый раз я хотел бы иметь скрипт jQuery, который запрещает отправку формы при обнаружении русского алфавита в некоторых входных данных. , Может ли кто-нибудь помочь мне с этим? (Или лучше сделать это с помощью PHP?)

Простой пример формы

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

Чтобы быть более конкретным. Например, скрипт, который обнаруживает кириллический символ во входной строке, например: «Джон Потоцкая Доу», а затем избегает отправки формы.

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Я бы использовал диапазон Regex, который охватывает все диапазоны кириллического юникода:

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

Соответствующий вопрос SO

Ваш код будет выглядеть примерно так:

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>
0 голосов
/ 29 августа 2018

Вы можете увидеть, где кириллические символы живут в пространстве Юникода здесь:

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 Array, например однострочник будет:

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