Японское регулярное выражение для чисел

1

** Вопрос: ** Как разрешить только номера на японском языке (Хирагана/Катагана)

Случай использования: я хочу взять поле "число" (мой вход должен принимать только номера с английского и японского)

Я написал следующий образец фрагмента:

// The goal of this demo is to demonstrate the RegEx patterns for English and Japanese Chracters

var english = "09c12";
var japanese =  "0123あb";


console.log("-----English Test---")
console.log(english.replace(/[^0-9\/]/gi, ''));
console.log("--------------------")


console.log("-----japanese Test---")
console.log(japanese.replace(/[^0-9\/]/gi, ''));
console.log("--------------------")

Проблема. Это не работает для японцев. Пожалуйста, просветите меня.

Я предполагаю, что японские символы имеют разные значения ASCII/Unicode?

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

Спасибо

  • 0
    0123あsd2 ... что это за цифры? Я думаю, что в кандзи числа для китайского, японского и корейского выглядят примерно одинаково, а не это, что выглядит как смесь арабского языка и символов. В любом случае вам, вероятно, придется использовать здесь литералы Unicode. Обновите свой вопрос, и, возможно, кто-то может ответить.
  • 0
    Это 0123ab в хирагане. Обновлено это в вопросе @TimBiegeleisen
Теги:

2 ответа

5

Ваши японские цифры не являются простыми цифрами ASCII, они являются символами полной ширины юникода (см. Http://www.fileformat.info/info/unicode/char/ff10/index.htm)

синтаксис регулярных выражений в javascript не имеет классов unicode, поэтому вам придется выбирать их вручную, указав диапазон Unicode.

console.log("0123あb".replace(/[\uff10-\uff19]/g, "_"));
console.log("0123あb".replace(/[^\uff10-\uff19]/g, "_"));
console.log(String.fromCharCode(...[...Array(10)].map((x, i) => 0xff10 + i))
);
  • 0
    Эй, Джимми, большое спасибо за ответ. Один вопрос, я просто хочу принять ввод как "числа" на японском языке (Hiragana / Katakana), будет ли это RegEx работать нормально? Пожалуйста, дайте мне знать.
  • 0
    yes '\uff10' -> "0" , '\uff19' -> "9" , поэтому этот диапазон включает только 10 цифр полной ширины.
Показать ещё 2 комментария
1

Это полезно для вас?

var english = "09c12";
var japanese = "0123あsd2";


console.log("-----English Test---")
console.log(english.replace(/[^0-9\/]/gi, ''));
console.log("--------------------")


console.log("-----japanese Test---")
console.log(japanese.replace(/[^0-9]/g, ''));
console.log("--------------------")

JSFiddle

  • 0
    прохладно! мне никогда не приходило в голову поставить Unicode непосредственно в регулярное выражение.
  • 0
    @ Джимми Спасибо. Я думал, что может использовать двухбайтовый символ для этого. Это была новая попытка для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню