1

メールフィールドを検証しようとしています。この正規表現をここのどこかから取得し、作成した別のフォームで使用しましたが、正常に機能します。しかし、私が今それを使用するとき、それは一致しません。

私がやろうとしているのは、電子メールをチェックし、それが良ければ、データベースの適切なフィールドに記録することだけです。

たくさんのものを貼り付けないために...私は問題のある行を取り除き、次の数行を擬似コード化しました。

基本的に、変数は次のとおりです。

$theEmail = $_post email from first page here
$regEx ='#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si';

そして私のphpはこれです

//essentially other field validation will go here...for now testing only empty.
    if(!empty($theEmail)){
        if (preg_match($regEx, $formEmail)) {
            //send it through to db.

        } else { //error stuff here }
    }

基本的に、これは決して実現しません。私が何をしても、電子メールは決して検証されません。私が言ったように、データをうまく検証する別のより複雑なフォームを作成しました

何が起こっているのかわからない。

4

4 に答える 4

4

代わりに使用することをお勧めしますfilter_var

if (filter_var($theEmail, FILTER_VALIDATE_EMAIL)) {
  //send it through to db.
} else {
  //error stuff here
}
于 2012-07-26T15:31:32.870 に答える
0

電子メールの検証では、すべての間違いの99%をキャッチする単純なソリューションと、10分の1パーセント多くキャッチする可能性があるが判読できない複雑なソリューションがあります。

簡単なルートに行き、次のようなものをチェックしてください

.+@.+\..+

はい、のようなメールアドレスを許可しますa@b.cが、500文字の正規表現のどこかに間違いがあり、有効なアドレスを拒否したために登録できないユーザーよりも、おそらく低価格です。

于 2012-07-26T15:23:57.687 に答える
0

/^[a-z0-9.!\#$%&\'*+-=?^_{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$/

最初#とエンディングを削除し#si、問題が発生/した=のでから削除しました。これにより、私の電子メールアドレスに一致が生成されます。

<?
$theEmail = 'me@davebel.com';
$regEx ='/^[a-z0-9.!\#$%&\'*+-=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$/';
print_r(preg_match($regEx, $theEmail));
?>

この正規表現は、電子メールの検証などでは非常に複雑ですが、本番環境に移行する前に、改良して微調整することをお勧めします。

于 2012-07-26T15:25:41.993 に答える
0

これを試してみてください!電子メールには無限の正規表現がありますが、クエリが解決されることを願っています

^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$

テストについては、正規表現テスターに​​アクセスしてください

于 2012-07-26T15:30:58.990 に答える