目錄
為什麼客戶端驗證很重要?
兩種主要的驗證方法
如何驗證表單
關於表單驗證的常見問題 (FAQ)
客戶端驗證和服務器端驗證有什麼區別?
如何在 PHP 中實現表單驗證?
一些常見的驗證技術是什麼?
如何顯示驗證錯誤消息?
如何驗證複選框?
如何驗證下拉列表?
如何驗證單選按鈕?
如何驗證日期?
如何驗證文件上傳?
如何防止 SQL 注入?
首頁 web前端 js教程 在客戶端的形式驗證

在客戶端的形式驗證

Mar 08, 2025 am 12:12 AM

Form Validation on the Client Side

客戶端表單驗證至關重要——它節省時間和帶寬,並提供更多選項來指出用戶填寫表單時出錯的地方。話雖如此,但這並不意味著您不需要服務器端驗證。訪問您網站的用戶可能使用舊瀏覽器或禁用了 JavaScript,這將破壞僅客戶端驗證。客戶端和服務器端驗證相互補充,因此,它們確實不應獨立使用。

為什麼客戶端驗證很重要?

使用客戶端驗證有兩個很好的理由:

  1. 它是快速的驗證方式:如果出現問題,則在提交表單時會觸發警報。

  2. 您可以安全地一次只顯示一個錯誤並關注錯誤的字段,以幫助確保用戶正確填寫您需要的所有詳細信息。

兩種主要的驗證方法

客戶端表單驗證的兩種主要方法是:

  • 一次顯示一個錯誤,關注有問題的字段
  • 同時顯示所有錯誤,服務器端驗證樣式

雖然同時顯示所有錯誤是服務器端驗證所必需的,但客戶端驗證的更好方法是一次顯示一個錯誤。這使得僅突出顯示已填寫不正確的字段成為可能,這反過來又使訪問者更容易修改並成功提交表單。如果您同時向用戶呈現所有錯誤,大多數人都會嘗試一次記住並糾正它們,而不是在每次更正後嘗試重新提交。

鑑於這些優勢,我將只關註一次顯示一個錯誤的驗證方法。

如何驗證表單

例如,以下代碼片段:

<code><br>
function validateMyForm() { <br>
if (parseInt(document.forms[0].phone.value)  <br>
        != document.forms[0].phone.value) { <br>
alert('请输入电话号码,仅限数字'); <br>
return false; <br>
} <br>
 <br>
return true; <br>
} <br>
<br><br></code>
登入後複製
登入後複製

電話:

有什麼問題?好吧,如果您在此之前添加另一個表單,代碼將嘗試驗證錯誤的表單。

更好的方法是包含表單名稱:

<code>function validateMyForm() { <br>
if (parseInt(document.forms.myForm.phone.value)  <br>
        != document.forms.myForm.phone.value) { <br><br></code>
登入後複製
登入後複製

onsubmit="return validateMyForm();"> 這肯定更好,但仍然不夠可移植——如果您想在另一個表單上重用此驗證的一部分,則必須首先進行大量文本替換。

因此,讓我們刪除表單名稱:

<code>function validateMyForm(form) { <br>
if (parseInt(form.phone.value) != form.phone.value) { <br><br></code>
登入後複製
登入後複製

此最後一種方法使用了對象 this,它始終指向當前對象。這使我們的代碼更具可移植性,並節省了打字時間。

現在如何讓訪問者的生活更輕鬆呢?讓我們關注觸發錯誤的字段,而不是讓他們自己去查找。

<code>function validateMyForm(form) { <br>
if (parseInt(form.phone.value) != form.phone.value) { <br>
alert('请输入电话号码,仅限数字'); <br>
form.phone.focus(); <br>
form.phone.select(); <br>
return false; <br>
}</code>
登入後複製
登入後複製

通過這些更改,瀏覽器將關注填寫不正確的字段,甚至會為訪問者選擇文本。如果需要滾動,這也將自動發生。

好的,這很好,但是您是否覺得每個字段的代碼有點太多了?如果我們創建一個簡單的函數庫,可以節省頁面的大量打字和下載時間呢?好吧,接下來我們將執行此操作——我們將定義我們的基本函數,以使驗證代碼更短。

<code><br>
function validateMyForm() { <br>
if (parseInt(document.forms[0].phone.value)  <br>
        != document.forms[0].phone.value) { <br>
alert('请输入电话号码,仅限数字'); <br>
return false; <br>
} <br>
 <br>
return true; <br>
} <br>
<br><br></code>
登入後複製
登入後複製

此函數執行數字的簡單驗證——它檢查字段是否僅包含數字,以及可選地,它是否在給定範圍內。您會注意到此代碼將錯誤消息作為參數傳遞。要使用這樣的函數,我們基本上可以將其添加到onsubmit處理程序中,如下所示:

<code>function validateMyForm() { <br>
if (parseInt(document.forms.myForm.phone.value)  <br>
        != document.forms.myForm.phone.value) { <br><br></code>
登入後複製
登入後複製

onsubmit="return validateNumber(this.phone,
'請輸入電話號碼,僅限數字', 5, 10);"> 像這樣調用它,它將檢查電話號碼是否為數字,並且長度大於 5 位,小於 10 位。注意如何將 phone 對像作為參數傳遞?這允許我們通過輔助函數關注它,而不是僅傳遞字段的值。

驗證數字的另一種方法是要求它們在給定範圍內。要使函數執行此類驗證,只需將檢查行更改為:

<code>function validateMyForm(form) { <br>
if (parseInt(form.phone.value) != form.phone.value) { <br><br></code>
登入後複製
登入後複製

如果您想對錶單應用多個檢查,您可以在onsubmit處理程序中嵌入多個規則。例如,想像一下,除了電話號碼之外,我們還需要輸入名字和姓氏:

<code>function validateMyForm(form) { <br>
if (parseInt(form.phone.value) != form.phone.value) { <br>
alert('请输入电话号码,仅限数字'); <br>
form.phone.focus(); <br>
form.phone.select(); <br>
return false; <br>
}</code>
登入後複製
登入後複製

onsubmit="return (
validateNumber(this.phone, '請輸入電話
號碼,僅限數字', 5, 10) &&
validateString(this.firstName, '請輸入
您的名字', 3, 15) &&
validateString(this.lastName, '請輸入
您的姓氏', 3, 15)
);"> 代碼要求所有驗證規則都評估為真(使用邏輯 AND - &&)。仔細觀察就會發現,從服務器腳本語言生成這種代碼非常容易……但這又是另一篇文章了。

<code>function validateNumber(field, msg, min, max) {  <br>
if (!min) { min = 0 }  <br>
if (!max) { max = 255 }  <br>
  <br>
if ( (parseInt(field.value) != field.value) ||   <br>
        field.value.length  max) {  <br>
alert(msg);  <br>
field.focus();  <br>
field.select();  <br>
return false;  <br>
}  <br>
  <br>
return true;  <br>
}</code>
登入後複製

如您所見,字符串驗證函數看起來或多或少相同;您還可以編寫其他函數並將它們與這些函數結合使用。

Web 上許多表單中都需要一個常見的字段,即用戶的電子郵件地址。我已經看到很多函數可以做到這一點,但是通常驗證電子郵件地址最簡單、最簡單的方法是使用正則表達式。

現在我們將擴展我們的函數,使其可以將字段定義為可選。

<code></code>
登入後複製
登入後複製

要驗證必需的電子郵件,您應該將其調用為:

<code>if ((parseInt(field.value) != field.value) ||   <br>
field.value  max) {</code>
登入後複製

如果您想將其設置為可選:

<code></code>
登入後複製
登入後複製

JavaScript 不能單獨用於驗證,但如果您擁有它,它會有很大幫助。您嵌入到 HTML 中的代碼越緊湊越好——它可以節省下載時間,搜索引擎也會喜歡您!

關於表單驗證的常見問題 (FAQ)

客戶端驗證和服務器端驗證有什麼區別?

客戶端驗證是在表單數據發送到服務器之前使用 JavaScript 在用戶的瀏覽器中執行的。它提供即時反饋並改善用戶體驗。但是,可以通過禁用 JavaScript 或操作代碼來繞過它,因此它並不完全安全。

另一方面,服務器端驗證是在提交表單數據後在服務器上執行的。它更安全,因為用戶無法繞過它。但是,它需要往返服務器,這可能會影響性能和用戶體驗。因此,建議同時使用客戶端驗證和服務器端驗證,以獲得最佳的安全性和用戶體驗。

如何在 PHP 中實現表單驗證?

PHP 提供了多種表單驗證函數。例如,您可以將 filter_var() 函數與不同的過濾器一起使用來驗證和清理輸入數據。這是一個驗證電子郵件地址的簡單示例:

$email = $_POST["email"]; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "無效的電子郵件格式"; } 此代碼檢查提交的電子郵件地址是否格式正確。如果不是,則顯示錯誤消息。

一些常見的驗證技術是什麼?

一些常見的驗證技術包括必填字段、長度限制、模式匹配和數據類型檢查。必填字段確保用戶填寫所有必要信息。長度限制限制可以輸入的字符數。模式匹配檢查輸入是否與特定模式匹配,例如電子郵件地址或電話號碼。數據類型檢查確保輸入是正確的類型,例如數字或日期。

如何顯示驗證錯誤消息?

您可以使用 JavaScript 進行客戶端驗證或使用 PHP 進行服務器端驗證來顯示驗證錯誤消息。在 JavaScript 中,您可以使用 setCustomValidity() 方法來設置自定義驗證消息。在 PHP 中,您可以將錯誤消息存儲在變量中並在表單中顯示它們。

如何驗證複選框?

您可以通過檢查復選框是否被選中來驗證複選框。在 JavaScript 中,您可以使用 checked 屬性。在 PHP 中,您可以檢查復選框值是否出現在 $_POST 或 $_GET 中。

如何驗證下拉列表?

您可以通過檢查是否選擇了有效選項來驗證下拉列表。在 JavaScript 中,您可以使用 selectedIndex 屬性。在 PHP 中,您可以檢查所選值是否在有效值的數組中。

如何驗證單選按鈕?

您可以通過檢查是否選擇了其中一個選項來驗證單選按鈕。在 JavaScript 中,您可以循環遍歷單選按鈕並使用 checked 屬性。在 PHP 中,您可以檢查單選按鈕值是否出現在 $_POST 或 $_GET 中。

如何驗證日期?

您可以通過檢查日期格式是否正確以及它是否為真實日期來驗證日期。在 JavaScript 中,您可以使用 Date 對象。在 PHP 中,您可以使用 checkdate() 函數。

如何驗證文件上傳?

您可以通過檢查文件大小、文件類型和文件擴展名來驗證文件上傳。在 JavaScript 中,您可以使用 files 屬性。在 PHP 中,您可以使用 $_FILES 數組。

如何防止 SQL 注入?

您可以使用預處理語句或參數化查詢來防止 SQL 注入,這些語句將 SQL 代碼與數據分開。這可以防止數據被解釋為代碼。在 PHP 中,您可以使用 PDO 或 MySQLi 擴展來執行預處理語句。

以上是在客戶端的形式驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1255
29
C# 教程
1228
24
神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript:探索網絡語言的多功能性 JavaScript:探索網絡語言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

如何使用Next.js(前端集成)構建多租戶SaaS應用程序 如何使用Next.js(前端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

如何安裝JavaScript? 如何安裝JavaScript? Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

See all articles