js 如何判断字符长度 (包括汉字,英文字符)

JavaScript023

js 如何判断字符长度 (包括汉字,英文字符),第1张

如果其中有数字英文符号等,用楼上的 alert("1sS#符".length) 方法是极度不准确的。其结果为 5

alert(len("1sS#符")) //英文、数字、符号均为一个字节,汉字为两个。 因此结果为 6

function len(s) {

var l = 0

var a = s.split("")

for (var i=0i<a.lengthi++) {

if (a[i].charCodeAt(0)<299) {

l++

} else {

l+=2

}

}

return l

}

你是这个意思吗?

<script type="text/javascript">

function testABC(str)

{

return /北京/.test(str)

}

document.write(testABC("北京眇辚因"))

</script>

给你再补充一些知识吧

因为正则的规则非常多, 我在这里只写JS内常用到的, 其它不常用的和更多, 你可以去看JS手册, 比如JS55.chm

1, 新建

//是新建RegExp对象的快捷方式

如:

/abc/

它等同于new RegExp("abc")

所以在JS内新建正则有以上两种方式, 常用/ /方式比较简单

新建时正则的参数有i, g, m, 它们分别表示为:

i - 忽略大小写匹配

g - 全局匹配, 它只影响match, replace, exec等函数的返回值, 不对test测试结果起作用

m - 多行匹配 (需要与^ $一起用才有用)

用法:

/abc/i/abc/g/abc/m或任意组合如/abc/ig

开头匹配符^表示必须以某字符开始, 如

/^abc/g 那么匹配的字符串必须以abc开头, 如abc123456

结尾匹配符$表示必须以某字符结尾, 如

/abc$/ 那么匹配字符串必须以abc结尾, 如23132abc

所以:

/^abc$/ 就只能匹配abc这个字符串

举例:

function testABC(str)

{

return /^abc$/i.test(str)

}

alert(testABC("ABC")) alert(testABC("DEF")) alert(testABC("abc"))//试下去掉i就不能匹配了

范围匹配符[]表示匹配一个范围

如[0-9] [a-z] [A-Z]表示匹配里面指定的范围

如/^a[c-f]zzz$/ 就只能匹配aczzz adzzz aezzz 和afzzz

指定长度匹配

{m}, {m, n} 表示最少m个, 最多n个, 如:/a{1}/只匹配1个a, /a{1,} 表示最少1个a或N个a, /a{1,3}/ 最少一个a最多3个a

*表示0个或任意个字符

如a* 表示匹配0个a或N个a

+表示1个或任意个字符

如a+表示匹配1个或N个a

?表示0个或1个

如a?表示0个a或1个a

.表示除了换行符以外的任意字符\w等同于[A-Za-z0-9_]\d等同于[0-9]

举例:

/^.+$/匹配1个或N个除了换行符以外的任意字符

/\d{3}/匹配3个数字

/\w{5}/匹配5个字母或数字或_

转义符:

有时候比如要匹配? * +这样的字符怎么办, 它已经是正则语法符号了, 这时就要用到转义符"\"

比如, 匹配1个或N个?号, 正则为: /^\?+$/

选择符|, 与分组符()

(|) 也就是或的意思, 比如(abc|def)就只能匹配abc或def

举例: /^a(pp|ng)le$/ 就只能匹配apple或angle, 分组的意思是将这个匹配存储进match, exec, replace的返回结果数组中

好了, 上面的你理解了的话, 你题目里面的就可以自己写出来了.

最简单的正则(不考虑年月份大小)也就是4个数字加\/再加2个数字再加\/再加两个数字 (/符号要转义, 所以为\/), 你自己试试写写看, 用\d或[0-9]都可以

另外, 基本的正则学会后, 要学习高级的正则.

如:

1, 非贪婪匹配模式: ?符跟在*, +, ?, {m}, {m,}, {m, n} 这些规则之后时为非贪婪匹配模式

2, 不储存分组(?:) 非常长的字符串匹配时速度非常明显

3, 正向预查?=和负向预查?!

等等

纯手工.....

有什么问题可以追问.....