2011-10-06 61 views
0

請大家幫忙。我不是要求你創建這個程序,只是請告訴我我錯過了什麼。這是爲了自學。我試圖做一個JavaScript程序,將這樣做: 1.警告用戶如果沒有創建名稱或電子郵件 2.電子郵件數據必須包含一個@符號和至少一個點(。)。此外,@不能是電子郵件地址的第一個字符,最後一個點必須出現在@符號後面,並且最後2個字符必須存在。 我的代碼:如果您需要專門爲在空空字符串檢查表單驗證自學

if (strValue) { 
    // string not empty 
} else { 
    // string empty 
} 

,我想:

<html> 
<head> 
<script type="text/javascript"> 

function validateForm1() 
{ 
var y=document.forms["myForm"]["email"].value; 
var atpos=y.indexOf("@"); 
var dotpos=y.lastIndexOf("."); 
var x=document.forms["myForm"]["fname"].value; 
if (x==null || x=="" || y=="") 
{ 
alert("First name and Email must be filled out"); 
return false; 
} 
else if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 

{ 
alert("Not a valid e-mail address"); 
return false; 
} 
} 

</script> 
</head> 

<body> 

<form name="myForm" action=# onsubmit="return validateForm1()" method="post"> 
First name: <input type="text" name="fname"><br/> 
Email: <input type="text" name="email"><br/> 
<input type="submit" value="Submit"> 
</form> 



</body> 

</html> 

回答

0

在您否則,如果條件下,它應該是dotpos + 2 >= y.length而不是dotpos + 2 >=x.length

+0

也與numbers1311407和Farhan建議的一樣,更好地使用正則表達式進行電子郵件地址驗證 – rb512

0

要檢查,看是否該字段不爲空,你可以簡單地使用這個認爲使用===運算符來檢查""是最好的選擇(這樣您就知道它實際上是一個您正在比較的字符串)。

驗證電子郵件地址,我會建議使用正則表達式。

下面是一個例子:

function validateEmail(elementValue){ 
    var emailPattern = /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
    return emailPattern.test(elementValue); 
} 
+0

這裏有一個[電子郵件正則表達式的更好的例子(http://stackoverflow.com/questions/1903356/email-validation-regular-expression)......它會打擊你的心! – Clive

0

而不是未來與電子郵件自己的規則,認爲電子郵件都堅持有規律的格式,使之成爲一個很好的候選人正則表達式。

這是我用谷歌發現的第一封電子郵件正則表達式(意思是可能有更好的郵件)。

var email_rx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 

這極大地簡化了您的代碼。沒有更多的找點和&符號,只需檢查電子郵件所提供的正則表達式匹配模式:

function validateForm1() { 
    var email = document.forms["myForm"]["email"].value; 
    var fname = document.forms["myForm"]["fname"].value; 

    // also note that in javascript, empty strings and nulls are both "falsey", 
    // so this conditional works. 
    if (!fname || !email) { 
    alert("First name and Email must be filled out"); 
    return false; 

    // if they both exist, test your email versus the regex. 
    } else if (!email_rx.test(email)) { 
    alert("Not a valid e-mail address"); 
    return false; 
    } 
} 
0

在您的代碼:

> function validateForm1() > { > var y=document.forms["myForm"]["email"].value; 

你應該小心長物業訪問鏈,如果一個部分丟失,你只會得到一個錯誤,腳本將停止運作。另外,爲變量使用明智的名稱,它使生活變得更加容易。考慮是這樣的:

var form = document.forms['myForm']; 
    var emailInput = form && form.elements['email']; 
    var email = emailInput && emailInput.value; 

現在,如果形式或電子郵件輸入缺失是什麼原因,你有錯誤處理,而不僅僅是崩潰腳本的一個更好的機會。

> var atpos=y.indexOf("@"); > var dotpos=y.lastIndexOf("."); 

您的電子郵件地址(這是相當小,並有可能沒有多大用處的,但是這是你的選擇)的要求可以用正則表達式得到滿足:

var emailRe = /[email protected]*\...+$/; 

> var x=document.forms["myForm"]["fname"].value; 
> if (x==null || x=="" || y=="") 

如果初始化X(我會打電話給)進行類似Ÿ(我改名爲電子郵件),然後X要麼是未定義或STRI NG。想必你的名字不能爲空而不能只有空格,所以:

var nameRe = /^\s*$/; // match string of just zero or more whitespace characters 
    if (name && nameRe.test) { 

> { 
>  alert("First name and Email must be filled out"); 
>  return false; 
> } 
> else if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 

以及可以:

else if (!emailRe.test(email)) { 

> { 
>  alert("Not a valid e-mail address"); 
>  return false; 
> } 
> }