10

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

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

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

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

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

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

5 回答 5

28

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

请参阅Unicode 中汉字的完整范围是什么?

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

于 2011-06-16T19:31:08.237 回答
3

看看Regex Unicode 块。

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

于 2011-06-16T19:39:10.817 回答
2

截至 2018 年,JavaScript 中有新的语法来匹配中文或任何其他非 ASCII 脚本:

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

诀窍是使用\p和使用正确的脚本名称,Hani代表Han script(中文)。完整的脚本列表在这里:http ://unicode.org/Public/UNIDATA/PropertyValueAliases.txt

要同时匹配中文和英文,您只需将其扩展一点,例如:

const REGEX = /([A-Za-z]|\p{Script=Hani})+/gu;
// does not match accented letters though
于 2018-08-21T03:50:17.320 回答
0

我在使用 XRegExp 验证中文名称方面做了一些工作。核心代码是XRegExp("^((?![\\p{InKangxi_Radicals}\\p{InCJK_Radicals_Supplement}\\p{InCJK_Symbols_and_Punctuation}])\\p{Han}){2,4}$","u")

jsfiddle.net/coas/4djhso1y

于 2018-03-14T16:58:10.060 回答
-1
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");

这样,您只需检查名称中是否有空格。

演示@http://jsfiddle.net/roberkules/U3q5W/

于 2011-06-16T19:37:03.273 回答