我有一个多语言网站(中文和英文)。
我想在javascript中验证文本字段(名称字段)。到目前为止,我有以下代码。
var chkName = /^[characters]{1,20}$/;
if( chkName.test("[name value goes here]") ){
alert("validated");
}
问题是,/ ^ [字符] {1,20} $ /只匹配英文字符。是否可以匹配任何(包括unicode)字符?我以前使用以下正则表达式,但我不想在每个characeters之间留出空格。
/^(.+){1,20}$/
答案 0 :(得分:24)
您可以查看Javascript + Unicode regexes并进行一些研究,以准确找到您想要允许的字符范围:
请参阅What's the complete range for Chinese characters in Unicode?
在阅读了这两项以及一些额外的研究之后,您应该能够找到合适的值来完成以下内容:/^[-'a-z\u4e00-\u9eff]{1,20}$/i
答案 1 :(得分:3)
您可以使用它来处理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");
这样您只需检查名称中是否有空格。
答案 3 :(得分:0)
我已经完成了一些使用XRegExp验证中文名称的工作。核心代码为XRegExp("^((?![\\p{InKangxi_Radicals}\\p{InCJK_Radicals_Supplement}\\p{InCJK_Symbols_and_Punctuation}])\\p{Han}){2,4}$","u")
答案 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