検索

ホームページ  >  に質問  >  本文

JavaScript 正規表現を PHP に変換する

この質問は何十回も寄せられていると思いますが、技術的には詐欺ではありません (必要に応じて他の質問も確認してください) ;)

基本的に、フロントエンド検証のために電子メール アドレスをチェックする Javascript 正規表現があり、たとえばフロントエンド検証が適切に機能しない場合 (ブラウザの問題) に備えて、CodeIgniter を使用してバックエンドを再チェックします。 。 ) これはかなり長い正規表現なので、どこから手動で変換すればよいかわかりません。

JS 正規表現を PHP 正規表現に変換するツールを探しています - 同様の質問に対する回答には見つかりませんでした (もちろん、そのようなツールが存在しない可能性もあります) .) さて、私は嘘をつきました - そのうちの 1 人は $39.95 のツールを提案しましたが、私は 1 つの式を変換するのにそれほどお金をかけたくありませんでした (いいえ、上記の質問への回答で示唆されているように、無料トライアルはありません) .)

これは、aSeptik によって寛大に提供された Javascript 式 です:

リーリー

CodeIgniter で使用されるものもありますが、これは同じルールに従っていない (特定の有効なアドレスを許可しない) ため、使用したくありません。

リーリー

JavaScript の正規表現で設定されたものと同じルール を PHP で使用したいと考えています。

フロントエンド コードでは電子メール アドレスは OK と表示されているのに、Codeigniter では No と表示されるという矛盾があります。もちろん、これはアプリで修正しようとしている動作です。

すべてのヒントをありがとう! :D

P粉465675962P粉465675962426日前901

全員に返信(2)返信します

  • P粉966979765

    P粉9669797652023-10-24 17:52:14

    JavaScript と PHP の正規表現エンジンにはいくつかの違いがあります。 正規表現エンジンの比較を確認してください。 記事では理論的な知識が提供され、PHP 正規表現と JavaScript 正規表現の違い 回答では実用的な情報が提供されます。

    ほとんどの場合、わずかな変更を加えるだけで、PHP で Javascript 正規表現パターンを使用できます。基本的な違いとして、PHP 正規表現は次のように文字列 (または文字列内) として定義されます。 リーリー

    JavaScript の正規表現はそうではなく、独自の方法で定義されています:

    リーリー

    PHP で正規表現を実行して試すことができます。 Codeigniter ファイル内で置き換えないことをお勧めします。ネイティブ ライブラリを拡張または置き換えるだけで済みます。詳細については、

    ライブラリの作成をご覧ください。

    返事
    0
  • P粉462328904

    P粉4623289042023-10-24 14:21:23

    予想よりも良い方法でこの問題を解決することができました。使用したい Javascript 正規表現を変換できませんでした (RegexBuddy を購入した後でも - 便利だったはずですが、正しい変換が行われませんでした)。そのため、Regex Verify Email Address をチェックすることにしました。 Web サイトにアクセスして、適切な正規表現に関する提案があるかどうかを確認してください。そのとき、私はこれを発見しました:

    "現在最高スコアの式は、PHP の filter_var() で使用されている式です":

    リーリー

    これは 4/86 エラーのみと一致しましたが、私が使用した Javascript は 8/86 エラーと一致したため、PHP の方が正確です。したがって、代わりに return filter_var($str, FILTER_VALIDATE_EMAIL); を使用するように CodeIgniter Form_validation ライブラリを拡張しました。

    ...しかし、JavaScript では動作するのでしょうか?

    リーリー

    ジン!奇跡的に効く!フロントエンド検証とバックエンド検証の間に求めていた一貫性が得られただけでなく、そのプロセスでより正確な正規表現も得られました。ウィンウィン!

    提案してくれた皆さんに感謝します!

    返事
    0
  • キャンセル返事