原来用的是简单的JS来检测数据格式
//數字Check,輸入的是否為數字,空字串不管
function Numcheck(Txt){
var st=Txt.value;
var validDT=false;
if (st=='') return;
if (isNaN(parseFloat(st))) {
alert('您輸入的並非數字,請重新輸入!');
Txt.focus();
return;
}
}
这个是借助JS的基本函数来实现,后来发觉这样子有bug,假如用户输入1.202abuxx,parseFloat会截取为1.202,然后isNaN为false,表示是数字
于是打算修改用正则表达式,我downlaod了asp版的关于正则表达式的FAQ,捣鼓了几天(因为以前从来没有用过,
现在我一下子似乎也读不懂是什么是正则表达式),给我最大帮助的是csdn的一篇:正则表达式使用详解(一),说的比较易懂,然后我就按照我的一个
javascript语法电子书关于test的描述,受益不浅!
刚开始用的是vbs:
Function RegExpTest(patrn, strng)
Dim regEx, retVal
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = False
retVal = regEx.Test(strng)
MsgBox(retVal)
If retVal Then
MsgBox("yes")
Else
MsgBox("no")
End If
End Function
很可惜,我写的vbs没有成功
于是我决定还是用js,我当初要用vbs因为我想用MS的东西,这样应该容易接受,不过我只习惯用js
最后写成:
function chkFloat(objNam,Negative){ //objNam:頁面物件名稱,Negative:0可以為負,1不能為負
var reg,objVal;
//objVal=document.all(objNam).value;
objVal = objNam.value;
if(objVal != ''){
if (Negative==0){
reg = /^-?/d+(./d+)?$/;
}
else{
reg = /^/d+(./d+)?$/;
}
//^:表示匹配模式必須出現在目標對象的開頭;
//-?:出現0次或者一次,和^結合表示如果是有-,要出現在開頭,沒有-?的就是表示不能為負數喔
///d+:表示是數字,一個數字或者多個
//(./d+)?:如果要出現.號必須和數字一起出現,後面加個問號,表示必須出現零次後者一次
//$:表示匹配模式必須出現在目標對象的結尾
if(reg.test(objVal) ==false){
alert("請檢查輸入數字格式!");
objNam.focus();
return;
}
}
}
function chkInt(objNam,negative) //objNam:頁面物件名稱,Negative:0可以為負,1不能為負
{
alert(parseFloat('12.002d2'));
var reg,objVal;
//objVal=document.all(objNam).value;
objVal = objNam.value;
var reg;
if(objVal != ''){
if(negative==0)
{
reg = /^-?/d+$/;
//^:表示匹配模式必須出現在目標對象的開頭;
//-?:出現0次或者一次,和^結合表示如果是有-,要出現在開頭,沒有-?的就是表示不能為負數喔
///d+:表示是數字,一個數字或者多個
//$:表示匹配模式必須出現在目標對象的結尾
}
else
{
reg = /^/d+$/; //同上解釋,只是開頭不能出現-號,即不能為負數
}
if(reg.test(objVal) ==false){
alert("請檢查輸入數字格式!");
objNam.focus();
return;
}
}
}
然后调用:
<input type="text" name="textfield1" οnblur="chkInt(this,1)">
<input type="text" name="textfield2" οnblur="chkFloat(this,0)">
如果用在页面上面检测,那么这2个应该够用了
这是我第一次写正则表达式