ホームページ > ウェブフロントエンド > jsチュートリアル > 経験豊富な開発者が電子メール検証に正規表現を決して使用しないのはなぜですか?

経験豊富な開発者が電子メール検証に正規表現を決して使用しないのはなぜですか?

Susan Sarandon
リリース: 2024-12-18 01:59:09
オリジナル
970 人が閲覧しました

誰も語らない問題

本当のことを言いましょう。メール検証は簡単そうに聞こえますが、これは経験豊富な開発者さえも陥りやすい技術的な罠です。

本当に何が起こっているのでしょうか?

サインアップ フォームを作成していると想像してください。あなたの最初の本能は?電子メールフィールドに正規表現を入力します。悪い動きです。

実際に有効な奇妙なメール

# 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 に従って技術的に有効な電子メール アドレスであることを知れば驚くでしょう。仕様では次のことが可能です。

  • ローカル部分を引用
  • 括弧内のコメント
  • ネストされたコメント
  • ローカル部分の特殊文字
  • 複数のドメインラベル

不適切な検証の隠れたコスト

1. 実際のユーザーの喪失

厳密な正規表現では、完全に適切な電子メール アドレスが拒否される可能性があります。次のような電子メールが「奇妙」に見えるという理由で、潜在的な顧客を拒否することを想像してください。

  • プラスアドレス指定 (user tags@gmail.com)
  • 型破りなドメイン構造
  • 国際文字セット
  • 正当だが複雑な命名規則

あなたの製品チームは本当に不幸になるでしょう、さらに言えば。営業担当者は本当に怒っているだろう。

2. ReDoS 攻撃

バックトラッキングを使用する正規表現エンジンは、正規表現サービス拒否 (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
    )
ログイン後にコピー

本当の解決策: 検証

  1. 基本的な構文チェック
  2. 確認リンクを送信します
  3. 電子メールが機能することをユーザーに証明してもらいます
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
ログイン後にコピー

実際の開発者のための Pro Tools

独自の正規表現を作成する代わりに、テストされたライブラリを使用します。

  • Python: 電子メール検証ツール
  • JavaScript: validator.js
  • Java: Apache Commons Validator

より良い検証クラス

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
ログイン後にコピー

結論

電子メールの検証は、突破できない要塞を築くことではありません。それは次のことです:

  • 実際のユーザーの参加を許可する
  • システムを安全に保つ
  • 物事を複雑にしないでください

重要なポイント

  1. 複雑な正規表現は忘れてください
  2. 実績のあるライブラリを使用する
  3. 確認メールを送信する
  4. ユーザーフレンドリーであること

これを正しく理解する開発者は、数え切れないほどの頭痛の種を避けることができます。

この部分をさらに詳しく説明してほしいですか?

ところで、私は無制限のコンテキスト ツールに取り組んでいます。このツールでは、コンテキストを何度も指定することなく、好みの LLM を使用できます。

開発者は完全に無料ですので、ぜひチェックしてください。


Why experienced developers never use regex for email validation?

以上が経験豊富な開発者が電子メール検証に正規表現を決して使用しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート