python使用正则验证电子邮件_如何使用正则表达式验证电子邮件地址?
在完全RFC 822標準的正則表達式是低效的和模糊的,因為它的長度。幸運的是,RFC 822被取代了兩次,目前的電子郵件地址規范是RFC 5322。RFC 5322導致正則表達式,如果研究幾分鐘并且對于實際使用而言足夠有效,則可以理解該正則表達式。
一個符合RFC 5322標準的正則表達式可以在http://emailregex.com/的頁面頂部找到,但是使用在互聯網上浮動的IP地址模式,其中包含允許00任何無符號字節十進制值的錯誤。以點分隔的地址,這是非法的。其余部分似乎與RFC 5322語法一致,并通過多個測試使用grep -Po,包括案例域名,IP地址,壞名稱和帶引號和不帶引號的帳戶名稱。
糾正00IP模式中的錯誤,我們獲得了一個工作且相當快速的正則表達式。(為實際代碼刮取渲染版本,而不是降價。)(:[A-Z0-9#$%& '* + / = ^ _`{|}? - +(?!\ [A-Z0-9#$%&!]'?* + / ?= ^ _`{|}? - ] +)* |“(?:[\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F \ X21 \ x23- \ x5b \ x5d- \ 0x7F部分] | \\ [\ x01- \ X09 \ X0B \ X0C \ x0e- \ 0x7F部分])*“)@(:(:[α-Z0-9](:???[A-Z0-9 - ] * [A-Z0 ?-9])\)+ [A-Z0-9](:?[A-Z0-9 - ] * [A-Z0-9])| \ [(:( :( 2(5'? [0-5] | [0-4] [0-9])| 1 [0-9] [0-9] |。[1-9] [0-9]))\){3}( ?:( 2(5 [0-5] | [0-4] [0-9])| 1 [0-9] [0-9] | [1-9] [0-9])|〔 A-Z0-9 - ] * [A-Z0-9]:(?:[\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F \ x21- \ X5A \ x53- \ 0x7F部分] | \\ [\ x01- \ X09 \ X0B \ X0C \ x0e- \ 0x7F部分])+)\])
這是上面的regexp?的有限狀態機圖,它比regexp本身更清晰
Perl和PCRE中更復雜的模式(例如在PHP中使用的正則表達式庫)可以正確地解析RFC 5322。Python和C#也可以這樣做,但它們使用與前兩個不同的語法。但是,如果您被迫使用許多功能較弱的模式匹配語言之一,那么最好使用真正的解析器。
同樣重要的是要理解,根據RFC驗證它絕對不會告訴您該地址是否實際存在于提供的域中,或者輸入該地址的人是否是其真正的所有者。人們一直以這種方式簽署其他人到郵件列表。修復需要更高級的驗證,該驗證涉及向該地址發送包含確認令牌的消息,該確認令牌意味著在與該地址相同的網頁上輸入。
確認令牌是了解您獲得進入該人的地址的唯一方式。這就是為什么現在大多數郵件列表都使用該機制來確認注冊。畢竟,任何人都可以放下president@whitehouse.gov,甚至可以解析為合法,但不太可能是另一端的人。
對于PHP,你應該不使用給定的模式驗證與PHP的電子郵件地址,正道從我引述如下:存在一些危險,即普通使用和廣泛的草率編碼將為電子郵件地址建立事實上的標準,其比記錄的正式標準更具限制性。
這并不比所有其他非RFC模式更好。它甚至不是足夠聰明,甚至處理RFC 822,更不用說RFC 5322?這一個,但是,是。
如果你想得到花哨和迂腐,實現一個完整的狀態引擎。正則表達式只能作為基本過濾器。正則表達式的問題在于告訴某人他們完全有效的電子郵件地址是無效的(誤報)因為正則表達式無法處理它只是從用戶的角度來看是粗魯和不禮貌的。用于此目的的狀態引擎可以驗證甚至糾正否則將被視為無效的電子郵件地址,因為它根據每個RFC反匯編電子郵件地址。這樣可以帶來更愉悅的體驗,例如指定的電子郵件地址“myemail @ address,com”無效。你的意思是'myemail@address.com'嗎?
總結
以上是生活随笔為你收集整理的python使用正则验证电子邮件_如何使用正则表达式验证电子邮件地址?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecs服务器内网连接_让不同地域云服务器
- 下一篇: editorloop 占用_system