2012-03-17 27 views
1

我做了一個接觸的形式:如何使用JavaScript驗證聯繫人表單?

<form action="mailto:[email protected]" method="post" enctype="plain/text"> 
    <label for="name">Name:</label>&nbsp;<input type="text" name="name" /> 
    <label for="email">Email:</label>&nbsp;<input type="text" name="email" /> 
    <br clear="all" /> 
    <input type="submit" value="Compose" /> 
</form> 

我想,而不必使用像PHP服務器端語言創建一個JavaScript表單驗證。有任何想法嗎?

+1

您可以使用jQuery在['.submit()'](http://api.jquery.com/submit/)方法上進行驗證。如果存在某些問題(如無效的電子郵件),則在'.submit(回調)'上返回'false'。 – 2012-03-17 19:05:42

+1

沒有PHP?您可以使用ASP ;-) – Tim 2012-03-17 19:06:08

+0

電子郵件:http://stackoverflow.com/questions/46155/validate-email-address-in-javascript – ZiTAL 2012-03-17 19:07:56

回答

1

這是一個壞主意。 JavaScript和JavaScript驗證可以通過多種方式繞過。

  1. 用戶可以告訴瀏覽器不執行頁面上的任何JavaScript。如果表單本身不依賴於JavaScript,表單仍會顯示出來,並且操作頁面仍然存在,但您的所有驗證都已消失。
  2. DOM可以由用戶編輯。網頁開發人員工具(如Chrome,Firefox和IE中的工具)使得更改表單屬性變得簡單。這包括從表單中刪除onsubmit等屬性。或者,用戶可以完全從網頁使用的資源中移除JavaScript功能。這允許用戶避免通過驗證。
  3. 用戶可以將POSTGET數據直接發送到操作網址,而無需瀏覽您的網頁。這對於攻擊者來說非常棒,因爲他們可以在不通過瀏覽器的情況下向您的服務器注入格式錯誤的表單 - 他們可以使用終端來代替,這非常方便。

綜上所述,不這樣做。允許用戶控制驗證是一件壞事。用戶可以關閉客戶端 JavaScript,但他們無法關閉PHP 服務器端驗證。如果您不希望遭受令人尷尬的跨站點腳本攻擊和其他漏洞,請使用PHP驗證。

如果你正在尋找一個PHP表單驗證庫,你可以在互聯網上找到它們中的一些。例如,我個人對one such library做出了貢獻,它在評估POSTGET類型表單中的字段方面做得很好。我對自我推銷表示歉意,爲了安全起見,我必須堅持要做服務器端驗證。

這並不是說客戶端驗證非常糟糕,不應該被使用。但它應該總是由服務器端驗證備份。您應該查看客戶端驗證,以便通知用戶在不重新加載的情況下表單輸入存在問題,但始終使用服務器端驗證實際查看輸入以查找問題。

+0

這是一個糟糕的主意,不是正確的答案。 – Deanie 2017-08-12 01:35:30

+0

這是任何替代品都可以被輕易繞過的時候。 – fruchtose 2017-11-30 18:04:39

1

看一下live example

$('#form1').submit(function() { 
    // Store messages 
    var msgs = []; 

    // Validate name, need at least 4 characters... 
    var name = $('[name=name]', this); 
    if(name.val().length < 4) { 
     msgs.push('- Name need at least 04 characters;'); 
    } 

    // Validate email [...] 
    // {CODE} 

    // Validate otherthings [...] 
    // {CODE} 

    if(msgs.length !== 0) { 
     alert("We have some problems:\n\n" + msgs.join("\n")); 
     return false; 
    } 
});​ 
0

小心不要混淆。你想做客戶端驗證,這是很好的,但不像服務器端驗證所要求的那樣,你只能在服務器端進行驗證。

任何腳本小孩仍然會設法發佈一些瘋狂的數據到你的服務器,所以你將不得不檢查你的請求並清理服務器端的數據。但是,如果你想在提交之前驗證你的表單數據(這絕對是一個好的標準),你應該使用衆多可用的jQuery插件之一來獲得最大的回報。

這裏是一個:http://docs.jquery.com/Plugins/Validation#Example

,如果你不喜歡使用jQuery,你可以隨時指定onBlur=myFunction()執行時,輸入字段失去它的焦點,你需要什麼邏輯。

+0

好的。所以顯然客戶端驗證不是一個好主意。 @David_Rodrigues感謝你的腳本,但我忘記了阻止JavaScript的瀏覽器。 > :(我將不得不去另一個潰敗,並進行一些服務器端驗證。哦,謝謝你們!這個definetley有助於學習情況。 – randmath 2012-03-17 19:55:54

+0

是的,它仍然是一個好主意,你只需要做兩者(取決於您的要求) – mindandmedia 2012-03-17 22:46:17