PHP證驗和檢查

來源:互聯網
上載者:User
PHP驗證和檢查
今天,我們要檢討的web應用程式的開發過程中的一個非常重要的一部分。使用者輸入的驗證。這是一個任何應用程式中最棘手的部分。這是為什嗎?由於開發商無法控制它。你可以寫在世界上最好的演算法,但仍然如果它包含使用者輸入的是有失誤的地方。即使我們把一些coplicated的邏輯,以防止錯誤的符號的輸入,檢查資料的一致性,並盡一切可能以確保它是一切OK,仍然是有可能,使用者輸入了錯誤號碼。雖然都表示,我們必須盡量避免人為錯誤的和做到這一點的最好辦法是使用Regex。 BasiclyRegex用於字串匹配。它們都是基於搜尋和模式比對的文本字串。了大量的書籍,他們寫的,甚至還有一些程式設計語言設計,尤其是Regex。但今天我們只是要在Regex可以協助我們與使用者輸入的簡單介紹一下。首先,我建議你熟悉的語言的一些基本概念。完全解釋它的文法在PHP手冊- >模式文法 現在,讓我們的工作。我將介紹一些最常見的問題與使用者輸入的。我敢肯定,你見過他們大多數如果不是全部。我們要建立所需的輸入欄位的登記表格。他們是如下: -姓名 -地址 -護照 -電子郵件 -電話 -郵編 -日期 -使用者名稱 -密碼 這裡是測試表(下載), 我們必須定義一些變數,我們將使用PHP驗證的例子,將持有我們錯誤訊息。他們的價值觀,我們重新整理頁面每次被清除。
$errName = "";
$errAddress = "";
$errEmail = "";
$errPassport = "";
$errPhone = "";
$errZip = "";
$errDate = "";
$errUser = "";
$errPass = "";

在PHP中使用Regex的方法有兩種。一個是真正的PHP風格,在這種情況下,我們必須使用ereg()函數,另一種是使用Perl風格的文法,我們驗證。在這種情況下,我們必須使用preg_match()函數。在本教程中,我們將使用preg_match(),因為它是在大多數情況下,更快,同時還支援最常見的Regex文法。它還為我們提供了更多的功能,我們可以使用。 我們將開始與使用者名稱的驗證。我們將只允許字母,空格和破折號。因此,我們建立我們的regexp(Regex)。我們將盡一類為我們的可能值。類的建立時我們括在parences中的一些符號。這是我們的類: [A-ZA-Z的-我們的類包含所有字母AZ(全部小寫字母),字母(大寫字母),空間和破折號之間, 現在我們要設定這個類申請每一個字元,我們進入。因此,我們添加了一個(+),再加上籤署後,我們的類定義。我們仍然缺少的東西。我們還沒有定義我們的驗證測試的範圍。我們要設定文本的一部分,我們正在驗證。如果我們不這樣做,如果發現在我們進入,這是我們沒有使用的字元,甚至一場比賽,將滿足我們的Regex。我們如何做到這一點?我們把我們之間/ ^ $ /開始和結束字元的字串。“^”是指該行的開始和“$”是指它的結束。我們準備建立我們的regexp。 / ^ [A-ZA-Z的- ] + $ /斜線preg_match用來定義我們的Regex的開始和結束, 現在我們已完成,我們呢?有剛做的一件事。我們定義我們班的方式,允許使用者輸入名稱begining破折號。這是我們要防止的東西。因此,我們必須添加一些我們的regexp,所以將不允許 排序,我們定義為一類新的使用者名稱的首字母。它可以只包含大寫字母。 現在我們結合我們所做的工作,到目前為止,得到最終結果。如果沒有匹配的preg_match()返回0。在這種情況下,我們要設定我們的錯誤變數,這樣我們就可以顯示一些有意義的資訊給使用者 / ^ [AZ] [A-ZA-Z的- ] + $ /

// Full Name must contain letters, dashes and spaces only and must start with upper case letter.
if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST["name"]) === 0)
$errName = '

Name must be from letters, dashes, spaces and must not start with dash

';

讓我們前進到下valitaion領域,這將是該地址。這裡不多做,因為它可以包含大量的符號。我們只需要定義一個類持有它們。 / ^ [A-ZA-Z0-9,_:“'] + $ / 翻譯本的regexp:不要灰心喪氣,從一開始到地址字串結束檢查如果我們的性格是以下AZ,包括AZ,0-9,空格,底線,破折號,點,逗號,分號,雙和事務所報價。您可以添加任何字元,你認為可能是一個地址的一部分。的東西這裡要注意的是,當我們有引號的話,我們必須把他們面前的一個逸出字元。

// Address must be word characters only
if(preg_match("/^[a-zA-Z0-9 _-.,:"']+$/", $_POST["address"]) === 0)
$errAddress = '

Address must be only letters, numbers or one of the following _ - . , : " '

';

我們的下一個任務是建立一個Regex驗證電子郵件。我們在這裡要包括未來的另一表達,這是預定義類的CONSTANS,represend。這裡的人的名單,我們將使用: W = [0-9A-ZA-Z_]類,包括數字,字母和底線。 D = [0-9]類只包括數字 這些常量節省大量的輸入和使原始碼更容易閱讀和理解。什麼是電子郵件的面具?第一部分的使用者名稱可以包含字母,數字,點和底線。它以字母開始,如果我們有點,它必須由字母后跟。然後,它必須遵循的@符號和再次的第一部分。在最後,我們必須有2至4個字母的一個點。每當我們有在regexp的特殊含義的字元,我們要使用它作為字元,我們必須以反斜線轉義。

// Email mask
if(preg_match("/^[a-zA-Z]w+(.w+)*@w+(.[0-9a-zA-Z]+)*.[a-zA-Z]{2,4}$/", $_POST["email"]) === 0)
$errEmail = '

Email must comply with this mask: chars(.chars)@chars(.chars).chars(2-4)

';

驗證字串是護照。它只能包含數字,是10位或12位元字。但是,我們如何設定我們要多少個字元。我們把所需數量的characteras parences {}和Regex看起來像這樣/ ^ D {10} $ / / ^ D {12} /美元。我們如何結合這兩個詞語,讓我們使用一個或其他。我們使用。它的標誌是“|”。我們的聲明是完整/ ^ D {10} $ | ^ D {12} $ /。

// Passport must be only digits
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.