问题是我需要在客户端验证中将这种类型的中文输入视为无效:
当任何英文字母混合任何中文字和空格时,总长度>=10时,输入无效。
例如:"你的a你的a你的a你" 或 "你的 你的 你的"(长度为10)是无效的。但是长度为9的"你的a你的a你的a"是可以的。
我使用JavaScript执行客户端验证,使用Java执行服务器端验证。所以我认为在两者上应用正则表达式应该是完美的。
有人能给出一些如何编写正则表达式规则的提示吗?
问题是我需要在客户端验证中将这种类型的中文输入视为无效:
当任何英文字母混合任何中文字和空格时,总长度>=10时,输入无效。
例如:"你的a你的a你的a你" 或 "你的 你的 你的"(长度为10)是无效的。但是长度为9的"你的a你的a你的a"是可以的。
我使用JavaScript执行客户端验证,使用Java执行服务器端验证。所以我认为在两者上应用正则表达式应该是完美的。
有人能给出一些如何编写正则表达式规则的提示吗?
从《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统一汉字和CJK统一汉字扩展A中的代码点。
这个正则表达式将匹配0到9个空格,表意空格(U+3000),A-Z字母或这2个CJK块中的代码点。
/^[ A-Za-z\u3000-\u303F\u3400-\u4DBF\u4E00-\u9FFF]{0,9}$/
不过,您也可以添加更多的块。
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>
a!b-c(d)3
(被视为无效)。 - Mariano/patternA|patternB/
... 例如:/^[ \u3000\u3400-\u4DBF\u4E00-\u9FFF]+$|^[ A-Za-z\u3000\u3400-\u4DBF\u4E00-\u9FFF]{0,9}$/
- Mariano