背景
IOS10下的汉字校验呈现问题:/\p{Unified_Ideograph}/u
以下用的'ji'示意汉字:
社区计划
const data1 = '我是';const data2 = 'ji龿'; const pattern1 = /^[\u4e00-\u9fd5]{1,6}$/gu; // nullconst pattern2 = /^[\u4e00-\u9fff]{1,6}$/gu; // nullconst pattern3 = /^\p{Unified_Ideograph}{0,6}$/gu; // ['ji龿'] IOS10有问题const pattern4 = /^\p{sc=Han}{1,6}$/gu;//['ji龿'] IOS10有问题 // 测试常见汉字 -> 全副失常console.log(data1.match(pattern1));console.log(data1.match(pattern2));console.log(data1.match(pattern3));console.log(data1.match(pattern4)); // 测试生僻字console.log(data1.match(pattern1)); // nullconsole.log(data1.match(pattern2));// nullconsole.log(data1.match(pattern3)); // ['ji龿']console.log(data1.match(pattern4));// ['ji龿']
论断:
- [\u4e00-\u9fd5] 的匹配形式不能笼罩全副汉字
- 即便应用[\u4e00-\u9fff]依然不能笼罩全副
\p{Unified_Ideograph}
和\p{sc=Han}
两种社区计划能够笼罩全副
你认为这样就完了吗?\p{Unified_Ideograph}
和\p{sc=Han}
这种指定Unicode Script 在IOS10
下不能失常运行!!!
好的解决方案:降级解决
validateChinese (input = '') { try { const pattern = new RegExp('^\\p{Unified_Ideograph}{1,6}$', 'gu') return input.match(pattern) } catch (e) { // 降级解决,会有局部汉字匹配不全 const pattern = /^[\u4e00-\u9fff]{1,6}$/g return input.match(pattern) }},
待解决
降级应用 [\u4e00-\u9fff]
后汉字长度的问题。一个汉字的长度可能是1,也可能是2(比方‘'ji’)。