区分中英文字符的两种方法(正则和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;

(0)

相关推荐

  • 区分中英文字符的两种方法(正则和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-heig

  • JavaScript访问字符串中单个字符的两种方法

    概述 JavaScript是一门很灵活的语言,也提供了很多原生的函数供我们编程使用.这篇文章主要对javascript中如何访问字符串中的单个字符做一下介绍. javascript中一切皆为对象,要访问字符串中的单个字符主要有两种方法:数组索引和charAt()函数. 索引和charAt() 索引方式访问单个字符串 在javascript中,字符串可以被当做数组来处理,所以我们可以用数组下标的方式来访问单个字符.代码如下: 复制代码 代码如下: <script type="text/jav

  • linux shell实现获取用户输入指定范围的单个字符的两种方法

    方法一: 复制代码 代码如下: echo `echo {a..z}``echo {A..Z}` > /tmp/letterfilewhile read -p "please input a letter: " letterdo    ((`awk -v var="$letter" 'BEGIN{print length(var)}'` == 1)) && grep -q $letter /tmp/tmpfile && break

  • js判断字符是否是汉字的两种方法小结

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 1.用正则表达式判断 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xml

  • PHP正则验证字符串是否为数字的两种方法并附常用正则

    php 正则验证字符串是否为数字 方法一: php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数字的方法. <? if($str) { if(eregi("^[0-9]+$",$str)) { $str=(int)$str; } else { echo "获取到的数据不是有效的数字类型,操作将停止!"; exit(); } } else { echo &qu

  • python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = count_pu = 0 for s in str: # 英文 if s in string.ascii_letters: count_en += 1 # 数字 elif s.isdigit(): count_dg += 1 # 空格 elif s.isspace(): count_sp += 1 #

  • Javascript里的两种使用正则的方法

    在Javascript里,有两种使用正则的方法,一是创建一个正则表达式的实例,而是使用String对象里的正则表达相关的方法. 正则表达式对象 两种创建方法 var my_regex=/[a-z]+/g;  var my_regex=new ("[a-z]+","g"); 方法 exec(string),对string进行正则处理,并返回匹配结果.  test(string),测试string是否含有匹配结果 字符串对象中的正则 方法 match(pattern) 

  • Js类的静态方法与实例方法区分及jQuery拓展的两种方法

    上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事了前端的工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知,这里还是赘述一番,以免产生歧义)的操作上,严重缺乏整体概念,最近看extetnd中再次提到拓展静态方法与实例方法,故而再次百度,才幡然领悟,其实一直有用,只是不知其专业术语呀,哈哈~ 静态方法,属于类的方法,即类可以直接调用的方法.为类所有实例化对象所共用(但不能用实例对象之间调用),所以静态

  • JS实现至少包含字母、大小写数字、字符的密码等级的两种方法

    本文实例讲述了JS实现至少包含字母.大小写数字.字符的密码等级的两种方法.分享给大家供大家参考.具体如下: 前言 密码,如果设置的太简单,很容易就被攻破,所以很多网站将密码设置的要求设置的挺严格,一般是字母.数字.字符3选2,区分大小写.对于设置得太简单的密码,予以错误提示.或者予以密码等级(低中高)显示,让用户设置高级密码.那如何利用JS实现呢? 实现代码如下: function passwordLevel(password) { var Modes = 0; for (i = 0; i <

  • jquery获取URL中参数解决中文乱码问题的两种方法

    从A页面通过url传参到B页面时,解析url参数可以用下面两种方法: 方法一:正则分析法 复制代码 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != nu

随机推荐