js 正则又一问题

今天写正则又发现,这个函数在IE下没问题,但在FF里当Email正确的时候,第一次OK,第二次不行,第三次又OK,第四次又不行。。。一直点掉交测式出这样一个结果,不知道为... 今天写正则又发现,这个函数在IE下没问题,但在FF里当Email正确的时候,第一次OK,第二次不行,第三次又OK,第四次又不行。。。一直点掉交测式出这样一个结果,不知道为什么?
我以为知道有个lastIndex,但是那是初始化一个RegExp对象反复使用,但我这是每次都初使化了呀,而且问题是奇数次时true,复数次时false,这就奇怪了,不知道有没有和我同样问题的

function checkform(o){
var emsg='',i=o.username,e,s;
if(''==i.value){e=i;emsg='\n·用户名不能为空';}else if(!/^[a-z_]\w{2,49}$/i.test(i.value)){e=i;emsg='\n·用户名不合法,首字符只能为字母和下划线\n 其他可以是数字字母和下划线\n 并且长度在3到50个字符之间';}
s='~!@#$%^&*()_+|`-=\\{}[]:;"\'<>,.?/';
i=o.password;
if(''==i.value){if(!e)e=i;emsg+='\n·请输入密码'}else if(!eval('/^[\\w'+s.replace(/(.)/g,'\\$1')+']{6,30}$/.test(\''+i.value.replace(/'/g,'\\\'')+'\')')){if(!e)e=i;emsg+='\n·密码只能是数字字母以及'+s+'这些字符\n 并且长度在6到30个字符之间'}else if(o.repwd.value!=i.value){if(!e)e=i;emsg+='\n·两次输入的密码不相同'}
i=o.email;
if(''==i.value){if(!e)e=i;emsg+='\n·请输入您的Email地址'}else if(!/^(\w+[_|\-|\.]?)*\w+@(\w+[_|\-|\.]?)*\w+\.[a-zA-Z]{2,4}$/g.test(i.value)){if(!e)e=i;emsg+='\n·Email地址格式不正确,请认真填写。'}
alert(emsg);
return false
}
算了,后来我还是用
var re=new RegExp('^(\\w+[_|\\-|\\.]?)*\\w+@(\\w+[_|\\-|\\.]?)*\\w+\\.[a-zA-Z]{2,4}$','g');
解决了,我好像用的是FF3.0的,FF2.0应该没问题,反正我发现FF3.0有很多毛病。
另外,据我所知g是perl正则语法中有的,应该不存在那种说法,只能说他对perl正则兼容性不好
展开
 我来答
百度网友acd2d0d
2008-04-30 · TA获得超过1488个赞
知道大有可为答主
回答量:1355
采纳率:100%
帮助的人:0
展开全部
用下面的网页没有试出你所说的错误啊? 你是怎么调用该函数的呢?

<script>
function checkform(o){
var emsg='',i=o.username,e,s;
if(''==i.value){
e=i;emsg='\n·用户名不能为空';
}
else if(!/^[a-z_]\w{2,49}$/i.test(i.value)){
e=i;emsg='\n·用户名不合法,首字符只能为字母和下划线\n 其他可以是数字字母和下划线\n 并且长度在3到50个字符之间';
}

s='~!@#$%^&*()_+|`-=\\{}[]:;"\'<>,.?/';
i=o.password;
if(''==i.value){
if(!e)
e=i;
emsg+='\n·请输入密码'
}
else if(!eval('/^[\\w'+s.replace(/(.)/g,'\\$1')+']{6,30}$/.test(\''+i.value.replace(/'/g,'\\\'')+'\')')) {
if(!e)
e=i;
emsg+='\n·密码只能是数字字母以及'+s+'这些字符\n 并且长度在6到30个字符之间'
}
else if(o.repwd.value!=i.value){
if(!e)e=i;emsg+='\n·两次输入的密码不相同'
}

i=o.email;
if(''==i.value){
if(!e) e=i;
emsg+='\n·请输入您的Email地址'
}
else if(!/^(\w+[_|\-|\.]?)*\w+@(\w+[_|\-|\.]?)*\w+\.[a-zA-Z]{2,4}$/g.test(i.value)) {
if(!e)e=i;
emsg+='\n·Email地址格式不正确,请认真填写。'
}
alert(emsg);
return false
}

</script>

<form>
<input type="text" name="username" value="abc">
<input type="text" name="password" value="aaadef">
<input type="text" name="repwd" value="aaadef">
<input type="text" name="email" value="abc@xxx.yyy">
<input type=submit name="submit" value="submit" onclick="checkform(this.form);">
</form>
百度网友2339e95
2008-04-30 · TA获得超过765个赞
知道小有建树答主
回答量:515
采纳率:0%
帮助的人:752万
展开全部
<script>
function checkform(o){
var filter=/^(\w+[_|\-|\.]?)*\w+@(\w+[_|\-|\.]?)*\w+\.[a-zA-Z]{2,4}$/;
var emsg='',i=o.username,e,s;
if(''==i.value){
e=i;emsg='\n·用户名不能为空';
}
else if(!/^[a-z_]\w{2,49}$/i.test(i.value)){
e=i;emsg='\n·用户名不合法,首字符只能为字母和下划线\n 其他可以是数字字母和下划线\n 并且长度在3到50个字符之间';
}

s='~!@#$%^&*()_+|`-=\\{}[]:;"\'<>,.?/';
i=o.password;
if(''==i.value){
if(!e)
e=i;
emsg+='\n·请输入密码'
}
else if(!eval('/^[\\w'+s.replace(/(.)/g,'\\$1')+']{6,30}$/.test(\''+i.value.replace(/'/g,'\\\'')+'\')')) {
if(!e)
e=i;
emsg+='\n·密码只能是数字字母以及'+s+'这些字符\n 并且长度在6到30个字符之间'
}
else if(o.repwd.value!=i.value){
if(!e)e=i;emsg+='\n·两次输入的密码不相同'
}

i=o.email;
if(''==i.value){
if(!e) e=i;
emsg+='\n·请输入您的Email地址'
}
else if(!filter.test(i.value)) {
if(!e)e=i;
emsg+='\n·Email地址格式不正确,请认真填写。'
}
alert(i.value);
alert(filter.test(i.value))
alert(emsg);
return false
}

</script>

<form>
<input type="text" name="username" value="abc">
<input type="text" name="password" value="aaadef">
<input type="text" name="repwd" value="aaadef">
<input type="text" name="email" value="abc@xxx.yyy">
<input type=submit name="submit" value="submit" onclick="return checkform(this.form);">
</form>

无错误了!!你的正则表达式的用法!!最好后面别用 g转义 FF 里面有时候无法转到!
请按正规方法做!!!代码规范 很重要
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式