Javascript RegEx UTF-8 - PullRequest
       21

Javascript RegEx UTF-8

0 голосов
/ 23 сентября 2018

Я знаю, что JavaScript в RegEx поддерживает только класс границы слов \ b в строках ASCII.Но могу ли я что-нибудь сделать, чтобы он работал с символами UTF-8?

Я прочитал несколько сообщений об этом здесь в stackoverflow и попробовал несколько методов, подобных описанному здесь .

Но я все еще не могу заставить его работать.

У меня есть страница, на которой у пользователя спрашивают его имя.

После того, как он введен в текстовое поле, появится ответвверх, используя часть значения из текстового поля, чтобы приветствовать пользователя, и игнорируя некоторые другие его части.

Если пользователь введет «Меня зовут Джон», ответ будет «Привет, Джон! Niceвстретиться с вами! ".

Это отлично работает на английском языке, но страница будет на нескольких разных языках, которые используют символы, такие как é á ó ñ - ... Как я могу заставить их игнорировать эти символы, когда онине часть имени?

Это то, с чем я работаю:

function myFunction() {
    var text;
    var answer = document.getElementById("myInput").value.toLowerCase();
	answer = answer.replace(/[^a-z0-9çéã\s]/g, "");
	answer = answer.replace(/\b(my|name|is|)\b/g, '').trim();

    switch(answer) {
        case "":
            text = "Please type something.";
        break;
        default:
        text = "Hello, " + answer + "! Nice to meet you!";
    }
    document.getElementById("reply").innerHTML = text;
}
<p>What is your name?</p>

<input id="myInput" type="text">

<button onclick="myFunction()">Go</button>

<p id="reply"></p>

Я пытался .replace(/á|é|ó|\b(my|name|is)\b/g, '') Но это удаляет эти символы, когда они являются частью слов / имен, а не когда они используются как отдельные слова (что яхочу).

Следуя примеру по этой ссылке, я также попытался:

answer = answer.replace(/(^|[ \n\r\t.,'"+!?-]+)(é|á|ó|ñ|õ|hello|my|name|is)([ \n\r\t.,'"\+!?-]+|$)/g, '$1$3').trim();

Но все равно не работает как положено ...

Как исправитьэто?

1 Ответ

0 голосов
/ 23 сентября 2018

Опять же: я не знаю, является ли это ответом, который вы ищете.Это также рекапитализирует первую букву имени.Поэтому, если я пишу «Меня зовут Сальвадор Дали», ответ звучит так: «Здравствуйте, Сальвадор Дали! Приятно познакомиться!»

var myInput = document.getElementById("myInput");

function myFunction() {
  var text,
    answer = myInput.value.toLowerCase();
  answer = answer.replace("my name is ", "");

  switch (answer) {
    case "":
      text = "Please type something.";
      break;
    default:
      text = "Hello, " + CapitalizeName(answer) + "! Nice to meet you!";
  }
  document.getElementById("reply").innerHTML = text;
}

function CapitalizeName(name) {
  let _array = name.split(" ");
  let n_array = [];
  _array.map(w => {
    w = w.charAt(0).toUpperCase() + w.slice(1);
    n_array.push(w);
  });
  return n_array.join(" ");
}
<p>What is your name?</p>

<input id="myInput" type="text">

<button onclick="myFunction()">Go</button>

<p id="reply"></p>
...