在PHP中的Regex驗證
驗證是處處為站長的共同關注。如果有人進入形式的資訊,您需要驗證它!但是,這樣做最簡單的方法是什嗎?
嗯,處理大量的文字模式,需要遵循時,我總是轉向Regex。Regex是你定義一個模式的一種方式。 雖然我不會教你的Regex,我會告訴Regex在PHP。PHP主要使用了Perl的regex的味道。這就是為什麼要執行的功能在PHPRegexpreg_match。執行Perl的Regex匹配,怎麼做呢?無論如何,有某些修飾符,可以添加到PHP中的格局,影響它如何執行。 例如,“我”,使得它不區分大小寫。我不得不這樣做,電子郵件地址模式,因為它縮短假設您使用區分大小寫Regex模式的可讀性。然後,有“米”修飾符將治療一個多行的主題,實際上多個內襯。否則將被忽略,分行符號(N)和錨點(^和$)將假定你的意思是整個主題的開頭和結尾。“S”是有用的,如果你經常使用Regex的模式,不以^開始並沒有一致的起始字元。 為了確定,如果該使用者名稱,密碼和驗證密碼是正確的,我以為只有字母數字字元是允許的。因此,尋找一切可能是一個潛在的錯誤的字元,而不是我是不是字母的字元搜尋。這是由在字元類的字元^ [:^ A-ZA-Z0-9]。然後,後來,如果有一個比賽,我知道有一個在外地的無效字元。 同時請記住,有元字元,需要在Regex轉義。我這個建議preg_quote 電子郵件和URL值是比較困難的,特別是因為這些標準是很難界定的。例如,在常規expressions.info,相當冗長的辯論已經到電子郵件的regex。從技術上來說,一個有效電子郵件地址可以包含單引號。對於大多數的電子郵件地址,列出將是有效。URL包含了類似的問題。眾多的頂級網域名稱,和一個列表是很難聚集。人也有一種傾向,只是說“software8.co”代替“http://software8.co”。也有情況下頂級網域名稱中包含一個國家的價值,以及,像“google.co.uk”, 我不建議嘗試,包括儘可能多的,你可以。如果您嘗試,以滿足大家,你最終驗證上花費這麼多時間,它已不再是可行的。驗證使用者輸入,在你的代碼是什麼權宜之計,而不是根據是什麼,他們將進入。 此外,regex是不是每一個問題的解決(雖然它是為大多數)。如果您要驗證的東西,有許多例外或極其複雜,它成為一件苦差事。我什至不能想象試圖日期和時間格式。中午12時或午夜嗎?是12:60有效嗎?約17:00怎麼樣?你需要上午和下午要輸入嗎?3意味著同為3:00?這些東西都是最好留給人類或其他一些方法,你可以制定。
$unit) { switch ($idx) { case 4:$rgx = "/^((ftp|http|https)://(w+:{0,1}w*@)?)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?$/"; break; case 3: $rgx = "/^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$/i"; break; case 2: //read below $rgx = "/[^A-Za-z0-9]+/"; break; case 1: //read below $rgx = "/[^A-Za-z0-9]+/"; break; case 0: //if characters are NOT normal $rgx = "/[^A-Za-z0-9]+/"; break; default: echo "???"; die("$unit ?"); break; } $n = preg_match($rgx, $unit, $matches); if ( ($idx == 0) || ($idx == 1) || ($idx == 2) ){ if ($n) { echo "Bad Characters in $unit; Alphanumeric only
"; } } else { if ($n == 0) { echo "Incorrect Format in $unit; Enter Valid Info
"; } }}?>