Как проверить китайское (юникод) и английское имя? - PullRequest
10 голосов
/ 16 июня 2011

У меня многоязычный сайт (китайский и английский).

Мне нравится проверять текстовое поле (поле имени) в javascript.Пока у меня есть следующий код:

var chkName = /^[characters]{1,20}$/;

if( chkName.test("[name value goes here]") ){
  alert("validated");
}

проблема в том, что / ^ [символов] {1,20} $ / соответствует только английским символам.Можно ли сопоставить ЛЮБЫЕ (включая юникод) символы?Раньше я использовал следующее регулярное выражение, но я не хочу допускать пробелов между символами.

/^(.+){1,20}$/

Ответы [ 5 ]

25 голосов
/ 16 июня 2011

Вы можете проверить Javascript + регулярные выражения Unicode и провести некоторое исследование, чтобы точно определить, какой диапазон символов вы хотите разрешить:

См. Каков полный диапазон для китайских символовв Unicode?

После прочтения этих двух и небольшого дополнительного исследования вы сможете найти подходящие значения для завершения чего-то вроде: /^[-'a-z\u4e00-\u9eff]{1,20}$/i

3 голосов
/ 16 июня 2011

Взгляните на блоки Regex Unicode.

Вы можете использовать это, чтобы заботиться об именах CJK.

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

По состоянию на 2018 год в JavaScript появился новый синтаксис для соответствия китайским или любым другим сценариям, не относящимся к ASCII:

const REGEX = /(\p{Script=Hani})+/gu; // note the 'u'
'你好'.match(REGEX);
// ["你好"]

Хитрость заключается в том, чтобы использовать \p и использовать правильное имя сценария, Hani обозначает ханьский алфавит (китайский).Полный список сценариев находится здесь: http://unicode.org/Public/UNIDATA/PropertyValueAliases.txt

Чтобы соответствовать китайскому и английскому языкам, вы просто немного его расширяете, например:

const REGEX = /([A-Za-z]|\p{Script=Hani})+/gu;
// does not match accented letters though
0 голосов
/ 14 марта 2018

Я проделал некоторую работу по проверке китайских имен с использованием XRegExp.Код ядра: XRegExp("^((?![\\p{InKangxi_Radicals}\\p{InCJK_Radicals_Supplement}\\p{InCJK_Symbols_and_Punctuation}])\\p{Han}){2,4}$","u")

См. jsfiddle.net / coas / 4djhso1y

0 голосов
/ 16 июня 2011
var chkName = /\s/;

function check(name) {

    document.write("<br />" + name + " is ");

    if (!chkName.test(name)) {
        document.write("okay");
    } else {
        document.write("invalid");
    }

}

check("namevaluegoeshere");

check("name value goes here");

Таким образом, вы просто проверяете, есть ли в имени пробелы.

demo @ http://jsfiddle.net/roberkules/U3q5W/

...