导航
  • .NET Conf China
...

很怪异的问题: 正则表达式

spanlly 2011-01-17 06:29:33
在JS中,文本框中要求只能输入数字,字母,小数点。空格
var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","gi");
// getstrCantInputName 为后台的返回值(“A-Z0-9 \.")

问题:
var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","gi");
//alert('<%=getstrCantInputName()%>');
var ty = document.Form1.TextBox1.value;

if(! reg102.test(ty))
{
alert("err");
return false;
}
else if ( ! reg102.test(document.Form1.TextBox2.value))
{
alert(document.Form1.TextBox2.value);
alert("err3");
return false;
}
else
{
alert("OK");
return true;
}
//------------------------------
当TextBox1.value与TextBox2.value的值输入相同时,为何总会出现alert("err3");
...全文
给本帖投票
292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
治學涯 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxcnn 的回复:]
这个问题和数据源有那么点关系,但问题并不是出在数据源上
举个简单的例子
JScript code
<script type="text/javascript">
var data = ["1", "2", "3", "4", "5" ];
var reg = new RegExp("^[0-9]+$", "g");
for(var i=0; i<data.length; i++)
{
……
[/Quote]

用FF浏览器lastindex为0嘛
spanlly 2011-01-20
  • 打赏
  • 举报
回复
非常感谢LXCNN的详细解答,学习了。
-过客- 2011-01-19
  • 打赏
  • 举报
回复
晕,最后这句那叫一个混乱
RegExp的方法test()和exec()受全局变量影响,而string的方法match(),search()等不受lastIndex的影响
==>
RegExp的方法test()和exec()受全局标志“g”和lastIndex的影响,而string的方法match(),search()等则不受影响
xuezj508 2011-01-19
  • 打赏
  • 举报
回复
数字,字母,小数点。空格

[A-Za-z0-9 \s\.]吧
-过客- 2011-01-18
  • 打赏
  • 举报
回复
这个问题和数据源有那么点关系,但问题并不是出在数据源上
举个简单的例子
<script type="text/javascript"> 
var data = ["1", "2", "3", "4", "5" ];
var reg = new RegExp("^[0-9]+$", "g");
for(var i=0; i<data.length; i++)
{
document.write("源字符串:" + data[i] + "   验证结果:" + reg.test(data[i]) + "   lastindex:" +

reg.lastIndex + "<br />");
}
</script>
/*-----输出------
源字符串:1   验证结果:true   lastindex:1
源字符串:2   验证结果:false   lastindex:0
源字符串:3   验证结果:true   lastindex:1
源字符串:4   验证结果:false   lastindex:0
源字符串:5   验证结果:true   lastindex:1
*/


test()方法受全局标志“g”的影响,正则表达式加了全局标志“g”,在一次匹配成功后,会设置lastIndex,下一次匹配,就会从这个lastindex所指示的位置开始尝试匹配,当匹配失败时,lastIndex会被重新置为0
从上面的例子可以看到,匹配第一个源字符串“1”时,正则表达式匹配成功,lastIndex被设置为1,在匹配第二个字符串“2”时,从位置1开始尝试,匹配失败,此时lastIndex被重新置为0,所以会看到上面这种true和false交替出现的现象
<script type="text/javascript"> 
var data = ["1", "2", "3", "4", "5" ];
var reg = new RegExp("^[0-9]+$", "");
for(var i=0; i<data.length; i++)
{
document.write("源字符串:" + data[i] + "   验证结果:" + reg.test(data[i]) + "   lastindex:" +

reg.lastIndex + "<br />");
}
</script>
/*-----输出------
源字符串:1   验证结果:true   lastindex:1
源字符串:2   验证结果:true   lastindex:1
源字符串:3   验证结果:true   lastindex:1
源字符串:4   验证结果:true   lastindex:1
源字符串:5   验证结果:true   lastindex:1
*/

如果没有加全局标志“g”,则 test() 忽略 lastIndex 的值,每次都从字符串的开始位置尝试匹配
RegExp的方法test()和exec()受全局变量影响,而string的方法match(),search()等不受lastIndex的影响
Mr-Jee 2011-01-18
  • 打赏
  • 举报
回复
楼主。介意发下你的测试数据吗?
bluevision7985 2011-01-18
  • 打赏
  • 举报
回复
关键要看你的被匹配的内容是什么呀,

g表示全局匹配
spanlly 2011-01-18
  • 打赏
  • 举报
回复
----------
前台的校验,为什么还要从后台getstrCantInputName
---------------------
所有的限制字符,都是从数据库中读取的,故在后台显示,这样可以不改代码:)

var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","gi");
//改为
var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","i");
改后可以通过了,但这两者的区别是什么呢,请指教

-过客- 2011-01-17
  • 打赏
  • 举报
回复
前台的校验,为什么还要从后台getstrCantInputName

var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","gi");
//改为
var reg102 = new RegExp("^[<%=getstrCantInputName()%>]*$","i");


如果不行,把
alert('<%=getstrCantInputName()%>');
的内容发一下

62,233

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部