因工作需要,今天帮同事写了一个要求如下的前台js验证代码:
1)以数字,逗号,"-"三个符号组成
2)以数字开头和结尾.
3)"-"前后必须是数字
<script type="text/javaScript"> /********* *only be some special char; */ function onlySomeChar(inputStr) { if((inputStr.match(/^\d.*\d$/g) && (inputStr.search(/[^0-9,-]/g)==-1)) || inputStr.match(/^\d*$/)) { for(var i =0;i<inputStr.toString().length;i++) { if(inputStr.charAt(i)=="-") { if(isInt(inputStr.charAt(i-1))==false || isInt(inputStr.charAt(i+1))==false) return false; } } return true; } return false; } /** *if Integer return true *else return false; */ function isInt(str) { if (str.search(/[^0-9]/g)!=-1) { return false; } return true; } //the function of test function test(strIn) { if(onlySomeChar(strIn)==false) { alert(0); } else { alert(1); } } </script> <input type="text" id="test" onchange="test(this.value)">
1 楼
xiarilian12
2009-05-06
如果是必填项
/^(\d{1,}[\d \- \,]?\d{1,})+$/
首先以数字开头和结束\d{1,}至少一个
中间的东西可有可无,顺序无关,我不知道逗号要不要转义
这样是不是更好一点
/^(\d{1,}[\d \- \,]?\d{1,})+$/
首先以数字开头和结束\d{1,}至少一个
中间的东西可有可无,顺序无关,我不知道逗号要不要转义
这样是不是更好一点
2 楼
jayzotion
2009-05-13
我测试了一下,你那个好像不能满足,比如:
比如 "11,1,1-11341131" 或者 "1" 或是 "11-1,1" 这样的组合都是满足条件的,但测试不通过
error:
1.如果只是一个数字的时候一看就不满足;
2.(/^(\d{1,}[\d \- \,]?\d{1,})+$/ =>数字后面必须是 ",",与要求不合
3. 要求是 数字中间的字符不一定要存在
4. ......
不过很感谢你的回复
function test(obj){ if(obj.value.match(/^(\d{1,}[\d \- \,]?\d{1,})+$/)){ alert(1); }else{ alert(0); } }
比如 "11,1,1-11341131" 或者 "1" 或是 "11-1,1" 这样的组合都是满足条件的,但测试不通过
error:
1.如果只是一个数字的时候一看就不满足;
2.(/^(\d{1,}[\d \- \,]?\d{1,})+$/ =>数字后面必须是 ",",与要求不合
3. 要求是 数字中间的字符不一定要存在
4. ......
不过很感谢你的回复
3 楼
zbm2001
2009-05-14
var reg = /^\d[\d,-]*\d$/g;
var reg1 = /\D-|-\D/;
var str = "11,1,1-11341131";
if(reg.test(str) && !reg1.test(str)){
// pass
}
var reg1 = /\D-|-\D/;
var str = "11,1,1-11341131";
if(reg.test(str) && !reg1.test(str)){
// pass
}
4 楼
zbm2001
2009-05-14
一个表达式,逻辑稍复杂些:
var reg = /^\d(-(?=\d))?([^\D]-(?=\d)|[\d,])*((?=\d)-)?\d$/g;
alert(reg.test(str))
var reg = /^\d(-(?=\d))?([^\D]-(?=\d)|[\d,])*((?=\d)-)?\d$/g;
alert(reg.test(str))