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, 正向预查?=和负向预查?!
等等
纯手工.....
有什么问题可以追问.....