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正则兼容性不好 展开
我以为知道有个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正则兼容性不好 展开
2个回答
展开全部
用下面的网页没有试出你所说的错误啊? 你是怎么调用该函数的呢?
<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>
<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>
展开全部
<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 里面有时候无法转到!
请按正规方法做!!!代码规范 很重要
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 里面有时候无法转到!
请按正规方法做!!!代码规范 很重要
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询