JS正则表达式
var reg=/^[\u4E00-\u9FA5\uF900-\uFA2D]{2,4}[﹝﹞\d]{6}[0-9]{4}[\u4E00-\u9FA5\uF900-\uFA2D]{1}$/;
求大神指教 展开
首先,你没说你懂那些,全讲又太多,所以说那些一看上去就懵逼的地方,我将解析写在了最后。
因为你问到汉字,我猜你可能不了解 \u4E00-\u9FA5\uF900-\uFA2D 是怎么回事,前面的小 u 代表他们是 Unicode,而后面的区间其实是 Unicode 编码中各个汉字的编码范围,u4E00。
Unicode 编码上规定了基础的汉字是从 u4E00 到 u9FA5,每一个编码代表一个字:
然后 \uF900 到 \uFA2D 同样是指汉字,不过是指那些生僻的字或者是形似的字,算是一种补充说明,不过明显这段代码不是最新的,因为 Unicode 编码是在不断的进步跟收集文字的,看下图可以知道这些补充文字已经超过了 FA2D 的极限,uF900。
仔细看,这些字的写法其实都跟常规的不同,比如那个繁体的“鹤”字跟下面那个全等的“鹤”字其实写法是不一样的,其他的也是如此,也就是说 \uF900-\uFA2D 其实是指字的不同写法,也称兼容字。
-----------------------------------------------------------------------------------------------
至于正则的话,用前面一段 /^[\u4E00-\u9FA5\uF900-\uFA2D]{2,4}/ 来解释就是:
^ 表示匹配最开头的。
[1-9] 表示匹配 1 到 9 间的任意数字,所以 [\u4E00-\u9FA5] 就是指匹配区间内全部的汉字。
放在后面的 {2,4} 作用于前面的 [...] 框,用来规定前面的匹配的数量 2<= 匹配数量<=4。
所以 /^[\u4E00-\u9FA5\uF900-\uFA2D]{2,4}/ 其实是说,匹配位于开头的满足[...]框内所有条件的字符(在这里其实就是汉字),因为后面跟着 {2,4} 则在开头的汉字数量我们会根据 2<=汉字数量 <=4 的条件进行匹配(注意五个汉字会匹配前面四个)。
结果如下图:
最后注意下 {n,m} 跟 {n} 的效果是不一样的,{n,m} 是 n ~ m 都匹配,而且默认会匹配最大的的数量(贪婪),而 {n} 则是指前面的匹配正好发生了 n 次时才被匹配,那么在后面加上代表最后位置的 $ 符号时,/[...]{n}$ /其实就是指最后一个字符如果符合 [...] 发生 n 次的情况就匹配。
正则不难但是内容挺多的细节也不少,如果在加上 ig 之类的关键字,效果又是不同,到网上自己去搜索比较好。