2011-11-13 104 views
1

我目前正在做JavaScript驗證,除了我的年齡驗證,一切工作都很完美。如果人進入一個字符串類型的值,則必須給予警告用戶輸入他/她的年齡爲數值...Javascript的年齡驗證

我不太知道如何去這使你的幫助會非常感謝!

你會看到我想要的validAge功能做的if語句:行55

這裏是我的代碼,我到目前爲止!

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Question 1/Vraag 1 - Basic JavaScript Validaton/Basiese JavaScript validasie 
    </title> 
    <link rel="Stylesheet" type="text/css" href="style.css" /> 
     <script language="javascript"> 

       function validate() 
       { 
        var firstname = document.getElementById("firstname"); 
        var surname = document.getElementById("surname"); 
        var age = document.getElementById("age"); 
        var email = document.getElementById("email"); 

        if(notEmpty(firstname, "ENTER USERNAME")) 
        { 
         if(notEmpty(surname, "ENTER SURNAME")) 
         { 
          if(notEmpty(age, "ENTER AGE")) 
          { 
           if(validAge(age, "AGE MUST BE A NUMERIC VALUE")) 
           { 
            if(notEmpty(email, "ENTER EMAIL")) 
            { 
             if(emailValid(email, "ENTER A PROPER EMAIL ADDRESS")) 
             { 
              return emailValid(); 
             } 
            } 
           } 
          } 
         } 
        } 
        return false; 
       } 

       function notEmpty(elem, helperMsg) 
       { 
        if(elem.value.length == 0) 
        { 
         alert(helperMsg); 
         elem.focus(); 
         return false; 
        } 

        return true; 
       } 


       function validAge(elem, helperMsg) 
       { 
        var age = elem.value; 

        if(age <= 0 || age > 100 || age.type == string???)) 
        { 
         alert(helperMsg); 
         return false; 
        } 

        return true; 
       } 


       function emailValid(elem, helperMsg) 
       { 
        var atpos = elem.value.indexOf("@"); 
        var dotpos = elem.value.lastIndexOf("."); 

        if(atpos < 0 || dotpos < 0) 
        { 
         alert(helperMsg); 
         return false; 
        } 

        return true; 
       } 

     </script> 
</head> 
<body> 
    <form method="get" action=""> 
    <table> 
    <tr> 
    <td> Firstname:</td> 
    <td> <input type="text" name="firstname" id="firstname" /><span id="fnError"> 
     </span></td> 
    </tr> 
    <tr> 
    <td> Surname:</td> 
    <td> <input type="text" name="surname" id="surname"/><span id="snError"> 
     </span></td> 
    </tr> 
    <tr> 
    <td> Age:</td> 
    <td> <input type="text" name="age" id="age"/><span id="aError"> 
     </span></td> 
    </tr> 
    <tr> 
    <td> Email:</td> 
    <td><input type="text" name="email" id="email"/><span id="eError"> 
     </span></td> 
    </tr> 
    <tr><td colspan="2"><input type="button" value="Validate" onClick="validate()" /></td></tr> 
    </table> 
    </form> 
</body> 
</html> 

回答

1

可以使用isNan功能!

2

使用正規檢查它是否是一個有效的年齡。法如isNaN仍將允許浮點數,雖然我從來沒有聽說過有人說My age is twelve dot three

function validAge(elem, helperMsg) 
    { 
     var age = elem.value; 
     //Two digits, so anything between and including 0 and 99 
     if(/^\d{1,2}$/,test(age)) 
     { 
      alert(helperMsg); 
      return false; 
     } 

     return true; 
    } 

另一個祕訣:不要嵌套數百if的條件 - 你也可以使用邏輯&& (AND)運營商。

if(a){ 
    if(b){ 
    if(c){ 
     ... 

可以縮短爲:

if(a && B && c){ 
+0

是......你是100%正確的.. – Exception

+0

但是,如果用戶決定輸入它作爲例如「十二」必須提醒他必須是數字「12」。 –

+0

@Joemeister這是可能的,但不可靠。用戶可能會錯誤地拼寫數字,或者完全不同。你最好只接受數字。另外,如果我可以選擇輸入數字,我會輸入'12',而不是''12'。 –

1

我想這是你想要什麼:

if(isNaN(age) || age <= 0 || age > 100)) 

isNaN(age)使用isNaN[MDN]功能檢查age與否實際上是一個數字。

注意,這將讓浮點年齡,這可能是也可能不是你想要的。如果你願意,你可以只允許整數年齡與此條件:

age % 1 === 0 

另外,我會避免嵌套所有if語句。你可以在每個之後做一個回報,像這樣:

if(notEmpty(firstname, "ENTER USERNAME")) return false; 
if(notEmpty(surname, "ENTER SURNAME")) return false; 
if(notEmpty(age, "ENTER AGE")) return false; 
/// skip a few ... 
return emailValid(); 

順便說一句,有一些人超過100歲。這個應用程序將不利於他們的用戶體驗。

+0

哈哈,是的,它只是用於測試!我會把最大值在150年左右? :P感謝您的幫助! –

+0

爲了測試數字是否不是浮點數,最好使用'age%1 == 0'而不是'parseInt'。如果你想堅持parseInt,使用'+ age === parseInt(age,10)'。爲什麼?因爲'parseInt('08')'等於零。 –

+0

@RobW實際上,'parseInt(「08」)'返回'8'。但我知道你的意思。 –

1

試試這個使用isNaN()

function validAge(elem, helperMsg) 
    { 
     var age = elem.value; 
     // If age is Not a Number, not at least 1, greater than 100, or has a decimal place. 

     if(isNaN(age) || age <= 0 || age > 100 || age.indexOf(".") >= 0) 
     { 
       alert(helperMsg); 
       return false; 
     } 

     return true; 
    } 
0

以上所有的答案是正確的。如果你想重用性的,請看一看這個plugin。它驗證與小的努力形式..

0
<html> 
<head> 
<title>Name</title> 
<script> 
function validatetext() 
{ 
    if(document.sign.fname.value=="") 
    { 
     alert("Missing First name!"); 
    } 
    if(isNaN(document.sign.age()) 
    { 
     alert("Enter numaric"); 
    } 
} 
</script> 
</head> 
<body><form method=post name="sign"> 
<b>name:</b> 
<input name="fname" type="text" size="30" maxlength="30" /> 
<br> 
<b>age:</b> 
<input name="age" type="text" size="30" maxlength="30" /> 
<input type="submit" name="signup" value="sign up" onclick="validatetext();" /> 
</form> 
</body> 
</html>