因为Servlet的Assignment的要求中要有必要的input validation,我决定用Javascript来实现
在判断电话号码必须为正整数这里,我在百度上查了下,大多都用正则表达式这种方法,但我个人觉得这方法看着有种让人眼花缭乱的感觉。。
这是别人的代码

function BASEisNotNum(theNum)
{
//判断是否为数字
if (BASEtrim(theNum)=="")
return true;
for(var i=0;i<theNum.length;i++){
oneNum=theNum.substring(i,i+1);
if (oneNum<"0" || oneNum>"9")
return true;
}
return false;
}

function BASEisNotInt(theInt)
{
//判断是否为整数
theInt=BASEtrim(theInt);
if ((theInt.length>1 && theInt.substring(0,1)=="0") || BASEisNotNum(theInt)){
return true;
}
return false;
}

function BASEisNotFloat(theFloat)
{
//判断是否为浮点数
len=theFloat.length;
dotNum=0;
if (len==0)
return true;
for(var i=0;i<len;i++){
oneNum=theFloat.substring(i,i+1);
if (oneNum==".")
dotNum++;
if ( ((oneNum<"0" || oneNum>"9") && oneNum!=".") || dotNum>1)
return true;
}
if (len>1 && theFloat.substring(0,1)=="0"){
if (theFloat.substring(1,2)!=".")
return true;
}
return false;




用正则更快一点

function checkRate(input)
{
 var re = /^[0-9]+.?[0-9]*$/;
 if (!re.test(input.rate.value))
 {
  alert("请输入数字(例:0.02)");
  input.rate.focus();
  return false;
 }

 

 

js如何判断输入是否为正整数?

 

js如何判断输入是否为正整数?



"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\\d+$"    //整数
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
"^(-?\\d+)(\\.\\d+)?$"  //浮点数



r.test(str);
--------------------------------------------


我搜到的几个全是用这种方法,也许这是一种高效的方法,但我个人觉得挺麻烦的,毕竟正则表达式不容易记忆,而且写的时候很容易写错,自己便想了另外一种思路,容易理解,欢迎大家来讨论

总的思路是用JS里面的内置函数parseInt()来转换输入框的内容,但这个函数是把字符串从左至右依次转换,当遇到第一个非整数字符时跳出,并返回已经转换为整数的字符,如果字符串第一个字符就不能整数字符,则返回NaN。
例如:
var str = "11aabb" ;
parseInt(str)的结果就是11
var str = "aaa"
parseInt(str)的结果是NaN
因为它是一个字符一个字符转换,就不能用parseInt(str) == 'NaN'这样的条件来判断,正如上例上说的,str="11aabb",返回的是11并不是NaN,这点要注意,我起初就没弄清楚。


由此我想到了,只有一个全是整数型字符组成的字符串在经过转换后才有可能和原来的字符串在数值上相等,所以可以用parseInt(str) == str这个来当作判断条件,如果相等则str一定是一个全是由整数字符组成的字符串。
大家一定注意到我用红色标注了“有可能”三个字吧,卖了个关子
微笑
因为如果是"00123"这样的字符串,在转换后就成为了"123"了,但事实上这种应该是合理的输入(因为我检验的是电话号码,电话号码是允许以零开头的)
所以我们在处理的时候,应该在最前面给它添加一个非零的整数字符,这并不影响判断的结果,你给一个整数增加任何一个非零数位,它仍然是整数。
例如:
var str = "010" ;
var tmpstr = "1" + str ;
这时候str实际为1010,这时候再用parseInt(tmpstr) == tmpstr来判断,如果相等则原str是合理输入,如果不相等,则原str一定是不合理输入。
下面给出一个完整的例子
function checkTelNum(input) {
    if(input == "") {
       alert("Can not be empty") ;
       return false ;
    }
    input = "1" + input ;   //可以用"1"-"9"任何一个
    if(parseInt(input) == input) {
       alert("Valid") ;
       return true ;
    }
    alert("Invalid") ;
    return false ;
}

下面是调用这个JS函数的HTML代码,为了简单,省略了form中的其它元素、属性
<form>
    <input type="text" name="tel" onBlur="checkTelNum(this.value)" />
</form>
当这个输入框失去焦点的时候就会触发checkTelNum这个函数