如何验证中文(unicode)和英文名称?

时间:2011-06-16 19:25:27

标签: javascript regex unicode character-properties

我有一个多语言网站(中文和英文)。

我想在javascript中验证文本字段(名称字段)。到目前为止,我有以下代码。

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

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

问题是,/ ^ [字符] {1,20} $ /只匹配英文字符。是否可以匹配任何(包括unicode)字符?我以前使用以下正则表达式,但我不想在每个characeters之间留出空格。

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

5 个答案:

答案 0 :(得分:24)

您可以查看Javascript + Unicode regexes并进行一些研究,以准确找到您想要允许的字符范围:

请参阅What's the complete range for Chinese characters in Unicode?

在阅读了这两项以及一些额外的研究之后,您应该能够找到合适的值来完成以下内容:/^[-'a-z\u4e00-\u9eff]{1,20}$/i

答案 1 :(得分:3)

查看Regex Unicode blocks.

您可以使用它来处理CJK名称。

答案 2 :(得分:0)

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/

答案 3 :(得分:0)

我已经完成了一些使用XRegExp验证中文名称的工作。核心代码为XRegExp("^((?![\\p{InKangxi_Radicals}\\p{InCJK_Radicals_Supplement}\\p{InCJK_Symbols_and_Punctuation}])\\p{Han}){2,4}$","u")

请参阅jsfiddle.net/coas/4djhso1y

答案 4 :(得分:0)

截至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