现有以下两行代码:
var r = new RegExp("\\s+","g");
alert(r.test(document.getElementsByName("username")[0].value));
alert(r.test(document.getElementsByName("password")[0].value));用正则匹配结果,经测试:alert(r.test(document.getElementsByName("username")[0].value)); true
alert(r.test(document.getElementsByName("password")[0].value)); falseusername是一个普通文本框,password是一个密码框
这两行代码我在外面经过滤过,所以执行这两行代码时候,已经能保证两个框都不为空,全部有值,
但是可能还含有空白字符
所以我才用正则来匹配的想再过滤的,但是这里出问题了,其他输入情况,判断结果都正常!
就是输入" 4"(第一个为空格,就两个字符或者" 5" " 6")的时候,出问题了
文本框的结果为true,密码框为false我两个框都输入一模一样的,而也是用一样的正则表达式,为什么结果会不一样?而且我觉得我那个正则可以匹配像" 4"这样的结构啊
var r = new RegExp("\\s+","g");
alert(r.test(document.getElementsByName("username")[0].value));
alert(r.test(document.getElementsByName("password")[0].value));用正则匹配结果,经测试:alert(r.test(document.getElementsByName("username")[0].value)); true
alert(r.test(document.getElementsByName("password")[0].value)); falseusername是一个普通文本框,password是一个密码框
这两行代码我在外面经过滤过,所以执行这两行代码时候,已经能保证两个框都不为空,全部有值,
但是可能还含有空白字符
所以我才用正则来匹配的想再过滤的,但是这里出问题了,其他输入情况,判断结果都正常!
就是输入" 4"(第一个为空格,就两个字符或者" 5" " 6")的时候,出问题了
文本框的结果为true,密码框为false我两个框都输入一模一样的,而也是用一样的正则表达式,为什么结果会不一样?而且我觉得我那个正则可以匹配像" 4"这样的结构啊
解决方案 »
- Html,js 初学者跪求大神介绍js读取td的值
- js多重拆封,替换的问题
- 在提交转入另一个页面时,my eclipse中的tomcat报错,请哪位高手帮忙指导一下,感激不尽!
- javascript 调用COOKIE 设置用户路径及作用域 ! 急!
- 用js动态添加option,并指定其位置的问题......急求
- 如何从网页中 跳出一个小窗口,这个窗口是不可见的隐含窗口,用来播放音乐,如何作到??
- 怎样用js验证文本框输入只能输入半角,不让输入全角。
- 在线急文:关于IFRAME的JAVASCRIPT的参数传送问题
- 晕了,各位拉一把吧
- 秘密问题!(急)
- jsp中获取JavaScript中的变量
- Ext.form.ComboBox 中如何移除事件
var r = /\s+/g;
var s1 = " 4";
var s2 = " 4";
alert(r.test(s1)); // true
alert(r.test(s2)); // false var r = /\s+/;
alert(r.test(s1)); // true
alert(r.test(s2)); // true 结论就是受到"g"标记影响
狂晕!
var r2 = /\s+/g;
var s1 = " 4";
var s2 = " 4";
alert(r1.test(s1)); // true
alert(r2.test(s2)); // true
文本框 里的字符串与你写在程序的字符串不一样的,程序里需要需要转义,看看这个帖子
http://topic.csdn.net/u/20091029/18/00f29281-f45d-4c1c-b604-53c5eb01a7ae.html
var s1 = " 4";
var s2 = " 4";
alert(r.test(s1)); // true
r.lastIndex = 0;
alert(r.test(s2)); // true
lastIndex考慮以下代碼:<script type="text/javascript">var r = /\d/g;alert(r.test('abc1'));
alert(r.lastIndex);alert(r.test('ab1'));
alert(r.lastIndex);alert(r.test('a1'));
alert(r.lastIndex);</script>lastIndex屬于實例屬性當一個正則表達式實例多次test或exec時,它的lastIndex將每一次都被更改。
现有一例子代码,感觉很简单。不过后来一运行结果却是令人吃惊,代码如下:var data=["id=html","id=head","id=body","id=div","id=em"];var reg=/id=.*/g;for(var i=0,length=data.length;i<length;i++){ alert(reg.test(data[i])); }理想的结果应该是:true,true,true,true,true。实际结果是:true,false,true,false,true。 之所以出现这种结果是因为正则表达式包含了全局标志g,当一个具有全局标志g的正则表达式调用test()方法时,它的行为和exec()方法相同,即它从lastIndex处开始检索特定的字符串,如果它发现匹配,就将lastIndex设置为紧接在那个匹配之后的位置。RegExp的lastIndex属性的初始值为-1,所以当匹配data[0]时,返回true,此时lastIndex=7,所以匹配data[2]时失败,返回false。匹配失败后lastIndex被重置为-1,所以匹配data[3]时返回true。可以运行以下代码进行验证:
(function(){ var data=["id=html","id=head","id=body","id=div","id=em"]; var reg=/id=.*/g; for(var i=0,length=data.length;i<length;i++){ alert(reg.test(data[i])); alert(RegExp.lastIndex); }})();
说明:lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。其初始值为 -1,不论何时产生一个成功匹配,它的值都被修改。lastIndex 属性被 RegExp 对象的 exec 和 test 方法,以及 String 对象的 match、replace、和 split 方法修改。下面的规则应用于 lastIndex 的值: 如果还没有匹配,则 lastIndex 被设置为 -1.
如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。
如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。
否则,lastIndex 被设置为紧接最近的匹配的下一个位置。
null
new RegExp(pattern, attributes);参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。这是W3C上对该对象的说明
var r = new RegExp("\\s+","g"); 这种实例化,貌似只能用一次。
var r = new RegExp("\\s+","g");
alert(r.test(document.getElementsByName("username")[0].value));
r = new RegExp("\\s+","g");
alert(r.test(document.getElementsByName("password")[0].value));
用一次,重新实例化一下,就没问题了。或者省略全局参数,这样var r = new RegExp("\\s+"); 也是可以的