日期:2014-05-16  浏览次数:20472 次

javaScript对只能输入某些特殊组合字符串的验证
因工作需要,今天帮同事写了一个要求如下的前台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,}至少一个
中间的东西可有可无,顺序无关,我不知道逗号要不要转义

这样是不是更好一点
2 楼 jayzotion 2009-05-13  
我测试了一下,你那个好像不能满足,比如:
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
}
4 楼 zbm2001 2009-05-14  
一个表达式,逻辑稍复杂些:
var reg = /^\d(-(?=\d))?([^\D]-(?=\d)|[\d,])*((?=\d)-)?\d$/g;
alert(reg.test(str))