簡體   English   中英

PHP和正則表達式有疑問嗎?

[英]PHP and Regular Expressions question?

我想知道下面的代碼是否是使用正則表達式使用preg_match檢查街道地址,電子郵件地址,密碼,城市和url的正確方法?

如果沒有,我應該如何修復preg_match代碼?

 preg_match ('/^[A-Z0-9 \'.-]{1,255}$/i', $trimmed['address']) //street address
 preg_match ('/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/', $trimmed['email'] //email address
 preg_match ('/^\w{4,20}$/', $trimmed['password']) //password
 preg_match ('/^[A-Z \'.-]{1,255}$/i', $trimmed['city']) //city
 preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $trimmed['url']) //url

您的街道地址: ^[A-Z0-9 \\'.-]{1,255}$

  • 您無需轉義單引號。
  • 由於您在char類中有一個dot ,因此它將允許所有char(換行符除外)。 如此有效,您的正則表達式就變成了^.{1,255}$
  • 您允許它的最小長度為1,最大長度為255。我建議您將最小長度增加到大於1。

您的電子郵件正則表達式: ^[\\w.-]+@[\\w.-]+\\.[A-Za-z]{2,6}$

  • 再次,你有. 在char類中。 解決它。

您的密碼正則表達式: ^\\w{4,20}$

  • 允許密碼長度為4到20,並且只能包含字母(大寫和小寫),數字和下划線。 我建議您也允許使用特殊字符,以使您的密碼更強。

您所在的城市正則表達式: ^[AZ \\'.-]{1,255}$

  • . 在char類中
  • 允許最小長度為1(如果您想允許城市的長度為1個字符,則可以)。

編輯:

由於您是正則表達式的新手,請花一些時間在Regular-Expressions.info上

對我來說,這似乎過於復雜。 特別是,我可以看到一些無效的東西:

  1. 對於名稱中帶有非ASCII字母的城市,例如“ Malmö ”或서울等,您的正則表達式將失敗。
  2. 您的密碼驗證器不允許在密碼中留空格(這對於輸入通行短語非常有用),甚至不允許數字或標點符號,許多人希望將其輸入密碼以提高安全性。
  3. 您的地址驗證程序不允許居住在公寓中的人(12/345 Foo St)

(這是假設您的意思是“ \\。”而不是“。”,因為“。”匹配任何內容)

等等。 通常,我認為過分依賴正則表達式進行驗證不是一件好事。 您最好允許這些字段使用任何內容,然后以其他方式進行驗證。

例如,使用電子郵件地址:僅僅根據RFC標准指定地址是有效的,並不意味着您實際上可以向其發送電子郵件(或者這是該人的正確電子郵件地址)。 驗證電子郵件地址的唯一可靠方法是實際向其發送電子郵件,並讓用戶單擊鏈接或其他內容。

URL也是一樣:僅僅因為它根據標准是有效的,實際上並不意味着那里有一個網頁。 您可以通過嘗試進行實際的請求以獲取頁面來驗證URL。

但是我個人的喜好是只進行絕對最小驗證,然后再進行驗證。 讓別人編輯他們的個人資料(或您要驗證的任何內容),以防他們犯錯。

確實沒有“正確”的方法來檢查其中的任何事情。 這取決於您的要求是什么。

對於電子郵件地址和URL,我建議使用filter_var而不是FILTER_VALIDATE_EMAIL只需將其傳遞給FILTER_VALIDATE_EMAILFILTER_VALIDATE_URL

與其他正則表達式一起,您需要確保逃脫。 在字符類中(否則,它將允許所有內容),並且您可能要考慮“城市” /“街道”類將允許使用諸如'''''垃圾,或僅允許空白。

請不要以為您知道地址的組成方式。 有成千上萬個帶有&和其他字母字母的城市,城鎮和村庄。

除非您通過特定於某個國家/地區的API(例如,美國的USPS)進行操作,否則請勿嘗試驗證地址。

以及為什么要限制用戶密碼中的字符? 除現有密碼外,對密碼沒有任何要求。

如果您使用這些正則表達式,則您的網站將無法使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM