如何使用正则表达式验证中文输入

How to use regular expression to validate Chinese input?

本文关键字:中文 输入 验证 正则表达式 何使用      更新时间:2023-09-26

问题是我需要在客户端验证中将这种中文输入视为无效:

当任何英文字符与任何中文字符和空格混合的总长度>=10时,

输入无效。

让我们说:"你的一个你的一个你的你"或"你的你的你的你"(长度是10)是无效的。但是"某某某某某某某某某某某某某某某某"(长度为9)是可以的。

我使用Javascript做客户端验证和Java做服务器端。所以我想在两者上应用正则表达式应该是完美的。

谁能给一些提示如何写规则在正则表达式?

From Unicode中中文字符的完整范围是什么?, CJK unicode范围为:

Block                                   Range       Comment
--------------------------------------- ----------- ----------------------------------------------------
CJK Unified Ideographs                  4E00-9FFF   Common
CJK Unified Ideographs Extension A      3400-4DBF   Rare
CJK Unified Ideographs Extension B      20000-2A6DF Rare, historic
CJK Unified Ideographs Extension C      2A700–2B73F Rare, historic
CJK Unified Ideographs Extension D      2B740–2B81F Uncommon, some in current use
CJK Unified Ideographs Extension E      2B820–2CEAF Rare, historic
CJK Compatibility Ideographs            F900-FAFF   Duplicates, unifiable variants, corporate characters
CJK Compatibility Ideographs Supplement 2F800-2FA1F Unifiable variants
CJK Symbols and Punctuation             3000-303F

您可能希望允许Unicode块CJK Unified IdeographsCJK Unified Ideographs Extension A中的代码点。

此正则表达式将匹配0到9个空格,表意符号空格(U+3000), A-Z字母或这两个CJK块中的代码点。

/^[ A-Za-z'u3000-'u303F'u3400-'u4DBF'u4E00-'u9FFF]{0,9}$/

表意文字列于:

    第1部分
  • 第2部分
  • 第3部分
  • 第4部分
  • 扩展

但是,您也可以添加更多的块。


代码:

function has10OrLessCJK(text) {
    return /^[ A-Za-z'u3000-'u303F'u3400-'u4DBF'u4E00-'u9FFF]{0,9}$/.test(text);
}
function checkValidation(value) {
    var valid = document.getElementById("valid");
    if (has10OrLessCJK(value)) {
        valid.innerText = "Valid";
    } else {
        valid.innerText = "Invalid";
    }
}
<input type="text" 
       style="width:100%"
       oninput="checkValidation(this.value)"
       value="你的a你的a你的a">
<div id="valid">
    Valid
</div>