区分中英文字符的两种方法(正则和charCodeAt())
比如这次用到的我先前介绍过的Vanadium表单验证插件, 因为是E文中不存在占2个字符的字, 所以, 区分中英文字符就得自己扩展. 本文就将介绍两种区分中英文字符的方法: 利用正则和charCodeAt方法区分中英文字符.
区分中英文字符的两种方法: 正则和charCodeAt()方法@Mr.Think
/*reset css*/
body{font-size:0.8em;letter-spacing:1px;font-family:\5fae\8f6f\96c5\9ed1;line-height:1.8em}
div,h2,p,fieldset,legend,form,textarea,span,em,sub{margin:0;padding:0}
input{font:12px/1.5 tahoma,arial,sans-serif;vertical-align:middle}
h1{font-size:1em;font-weight:normal}
h1 a{background:#047;padding:2px 3px;color:#fff;text-decoration:none}
h1 a:hover{background:#a40000;color:#fff;text-decoration:underline}
h3{color:#888;font-weight:bold;font-size:1em;margin:1em auto;position:relative}
/*demo css*/
fieldset{padding:20px;border:1px solid #ccc;width:720px}
fieldset legend{background:#a40000;color:#fff;text-align:center;padding:0 8px;margin-left:25px}
fieldset label{display:block;padding-left:25px;line-height:40px}
fieldset label input{padding:2px 3px;border:1px solid #888;width:200px;height:16px}
fieldset label input:focus{border:1px solid blue}
/*******************************
* @author Mr.Think
* @author blog http://mrthink.net/
* @2010.10.22
* @可自由转载及使用,但请注明版权归属
*******************************/
window.onload=function(){
var regExpForm=document.getElementById('regexp');
var charCodeAt=document.getElementById('charcodeat');
var entryVal=null;//输入的值
var cnChar=null;//中文字符
var cnArr=new Array();//存放中文字符的数组
var entryLen=null;//输入字符的长度
//通过正则区分中英文字符--Mr.Think推荐方法
regExpForm.onblur=function(){
entryVal=this.value;
entryLen=entryVal.length;
cnChar=entryVal.match(/[^\x00-\x80]/g);//利用match方法检索出中文字符并返回一个存放中文的数组
entryLen+=cnChar.length;//算出实际的字符长度
alert('你输入了 '+cnChar.length+' 个中文字符;\n它们分别是: '+cnChar+' ;\n共计输入了 '+entryLen+' 个字符.');
}
//通过charCodeAt区分中英文字符
charCodeAt.onblur=function(){
entryVal=this.value;
entryLen=entryVal.length;
for(var i=0;i255){//遍历判断字符串中每个字符的Unicode码,大于255则为中文
cnArr.push(entryVal[i]);//讲符合条件的值插入到中文字符数组中
//注意一个小bug,push是向数组的末尾添加一个或多个元素并返回新的长度,所以未刷新的情况下反复blur会累加字符值
}
}
entryLen+=cnArr.length;
alert('你输入了 '+cnArr.length+' 个中文字符;\n它们分别是: '+cnArr+' ;\n共计输入了 '+entryLen+' 个字符.');
}
}
Mr.Think的个人博客
@专注前端技术,热爱PHP,崇尚简单生活.
返回文章页:区分中英文字符的两种方法: 正则和charCodeAt()方法@Mr.Think
请在如下表单中输入字符后点击表单外区域
通过正则表达式判断:
通过charCodeAt()方法判断:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
正则无疑是最强大的判断各种条件的方法, 最近也在研习它, 虽然枯燥, 但仍有乐趣. 用它来判断一个双字节的中文字符也是轻而易举地. 而判断中文字符, Mr.Think也是非常推荐用这种方法的, 简单且执行效率高.
核心代码如下:
代码如下:
regExpForm.onblur=function(){
entryVal=this.value;
entryLen=entryVal.length;
cnChar=entryVal.match(/[^\x00-\x80]/g);//利用match方法检索出中文字符并返回一个存放中文的数组
entryLen+=cnChar.length;//算出实际的字符长度
}
第二种方法是通过charCodeAt()方法判断Unicode码值, 若大于255即为中文字符(为什么? 请Google ). Mr.Think并不建议用这种方法的, 它的执行效率没有正则高, 也没有正则简单.
核心代码如下:
代码如下:
entryVal=this.value;
entryLen=entryVal.length;
for(var i=0;i<entryVal.length;i++){
if(entryVal.charCodeAt(i)>255){//遍历判断字符串中每个字符的Unicode码,大于255则为中文
cnArr.push(entryVal[i]);//讲符合条件的值插入到中文字符数组中
//注意一个小bug,push是向数组的末尾添加一个或多个元素并返回新的长度,所以未刷新的情况下反复blur会累加字符值
}
}
entryLen+=cnArr.length;