起因
最近接触了一道有意思的题目,就是单击表格的表头,根据表头的那一栏进行排序。恰好有一栏的数据全部是中文汉字,如果仅仅对于汉字数组使用默认的sort排序,那么是针对汉字的unicode值进行比较排序,结果肯定与我们习惯的根据汉字的拼音排序大不相同。但是对于一个简单易用的程序而言,没有必要写个复杂的算法来将汉字转化为拼音,然后在进行ascII码值比较,代价有些大,幸好,js中有一个函数可以基本解决我们的问题,那就是localCompare函数。
localCompare()
localCompare函数在W3C规范上是这样定义的:
用本地特定的顺序来比较两个字符串。localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。
可以这样使用:
str.localCompare(s);
返回-1,则str<s;返回0,则str==s;返回1,则str>s。
这样,针对汉字数组,我们就很容易来实现本地化比较。
Chs.sort(function(a,b){ return a.localeCompare(b); });
监测汉字
由于汉字在当前的系统中都是unicode编码,因此可以使用unicode码值来判断是否是汉字。汉字在unicode的范围是u4E00-u9FFF,因此可以使用正则来判断。
function CheckChinese(obj,val){ var reg = new RegExp("[\u4E00-\u9FFF]+","g"); if(reg.test(val)) return true; else return false; }