<input type="text" id="txt">
<script type="text/javascript">
window.onload = function() {
var reg = /^[\u4e00-\u9fa5\u22c5\u2022\u00b7]+$/gi,
txt = document.getElementById("txt");
txt.onblur = function() {
console.log(txt.value);
console.log(reg.test(txt.value)); //false
}
}
</script>
验证中文、圆点字符,为毛输入框的文本值没变化的情况下:第一次触发验证是true,第二次是false?
1
Arrowing 2015-08-12 10:46:43 +08:00 1
|
2
tamamaxox 2015-08-12 10:49:43 +08:00 1
/^[\u4e00-\u9fa5\u22c5\u2022\u00b7]+$/ 就好了,没有必要加gi
|
3
flowfire 2015-08-12 10:58:32 +08:00 1
很奇怪你为什么验证中文字符还要加上 不区分大小写 。。。。
|
5
flowfire 2015-08-12 11:12:45 +08:00
@laoona
i才是不区分大小写。。 g是匹配所有 如2楼所说,如果你只是检测这个里面存不存在的话的确没必要加上g 比如 "1111".match(/1/) 和 "1111".match(/1/g) 出来的结果分别是 ['1'] 和 ['1','1','1','1'] 不加g就是一旦匹配到第一个就停止。。 加了g就是一直查找直到所有的全部匹配到 |
6
flowfire 2015-08-12 11:15:51 +08:00
刚刚google了一下。。。。m的意思大概就是换行符能被 . 匹配吧。。
|
7
flowfire 2015-08-12 11:21:16 +08:00
点进连接看了一下。。。
大意是这么回事 由于 g 是要求查找所有匹配 所以每次调用并不是每次都取第一个匹配值。。 而是依次取第一个,第二个,第三个。。知道空。。 按照你的写法,貌似只能匹配到一个值, 所以返回的值大概是这样 返回取到的第一个值 true 后面没有了,返回空 false 上一次返回了空,返回取到的第一个值 true 后面没有了,返回空 false |
9
Biwood 2015-08-12 13:43:12 +08:00
经典问题啊,用正则的 test() 测试的时候千万要小心,特别是加上 global 标识符之后,正则对象会记忆上一次的匹配位置,接下来的 test 都是接着上一次成功的位置开始匹配的,你每次执行 test 完之后可以打印 reg.lastIndex 看一下
|