ホームページ >ウェブフロントエンド >jsチュートリアル >経験豊富な開発者が電子メール検証に正規表現を決して使用しないのはなぜですか?
本当のことを言いましょう。メール検証は簡単そうに聞こえますが、これは経験豊富な開発者さえも陥りやすい技術的な罠です。
サインアップ フォームを作成していると想像してください。あなたの最初の本能は?電子メールフィールドに正規表現を入力します。悪い動きです。
# These are ALL technically valid emails! valid_emails = [ '"J. R. \"Bob\" Dobbs"@example.com', 'admin@mailserver1', 'user+tag@gmail.com', 'postmaster@[123.123.123.123]' ]
ほとんどの正規表現エンジンは、これらで停止します。
なぜですか?
電子メールの標準はワイルドです。
ほとんどの開発者は、これらが実際に RFC 5322 に従って技術的に有効な電子メール アドレスであることを知れば驚くでしょう。仕様では次のことが可能です。
厳密な正規表現では、完全に適切な電子メール アドレスが拒否される可能性があります。次のような電子メールが「奇妙」に見えるという理由で、潜在的な顧客を拒否することを想像してください。
あなたの製品チームは本当に不幸になるでしょう、さらに言えば。営業担当者は本当に怒っているだろう。
バックトラッキングを使用する正規表現エンジンは、正規表現サービス拒否 (ReDoS) 攻撃の影響を受けやすくなります。
def dangerous_regex_check(user_input): # This regex can destroy your server's performance evil_pattern = r'^(a+)+b$' return re.match(evil_pattern, user_input) # Just 30 characters can crash your system malicious_input = 'a' * 30 + 'b'
攻撃者は、検証機能をクロールして停止させる入力を作成できます。
def smart_email_check(email): """Quick and dirty email sanity check""" return ( email and '@' in email and '.' in email.split('@')[1] and len(email) <= 254 # Email length limit )
def validate_email(email): if not basic_email_check(email): return False # Send verification token token = generate_unique_token() send_verification_email(email, token) return True
独自の正規表現を作成する代わりに、テストされたライブラリを使用します。
class EmailValidator: @staticmethod def validate(email): """ Smart email validation - Quick syntax check - Verify deliverability """ try: # Use a smart library validate_email( email, check_deliverability=True ) return True except EmailInvalidError: return False
電子メールの検証は、突破できない要塞を築くことではありません。それは次のことです:
これを正しく理解する開発者は、数え切れないほどの頭痛の種を避けることができます。
この部分をさらに詳しく説明してほしいですか?
ところで、私は無制限のコンテキスト ツールに取り組んでいます。このツールでは、コンテキストを何度も指定することなく、好みの LLM を使用できます。
開発者は完全に無料ですので、ぜひチェックしてください。
以上が経験豊富な開発者が電子メール検証に正規表現を決して使用しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。