0

ええと、それは壊れています:

私は完全に機能する正規表現を持っていて、すべての数字、文字、および電子メール関連の句読点(._- @)のみを使用して電子メールフィールドをサニタイズできました。次に、適切な電子メール正規表現を追加して、正しいかどうかを確認するとよいと思いました。パターン。これは私が今持っているものです:

function check_chars_email($str) {
$str_replace = preg_replace("/[^a-zA-Z0-9-@_\.]/","",$str);
if(preg_match("/^(.*)@(.*)\.(.*)$/", $str_replace)) {
return $str_replace;
} else {
return FALSE;
}

。*の周りに角かっこは必要ないことは承知していますが、かっこを使用すると読みやすくなります。

その関数を呼び出すと、次のようになります。

$esc_email = mysqli_real_escape_string($mysqli, check_chars_email($_POST["email"]));
$tr_email = trim($esc_email);
$_SESSION["email"] = $tr_email;

次に、これを使用して、登録スクリプトの開始時に確認します。

($ tr_email === FALSE)

そして、有効な電子メールアドレスで試してみても失敗します。変数が空かどうかもテストしているので、===の代わりに== FALSEを試すことができると思いますが、できるだけ正確にしたいと思います。

誰か考えがありますか?

4

2 に答える 2

2

PHPがすでに使用しているのに、なぜこれに正規表現を使用するのでしょうか。

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  // it's valid
}

フィルタを表示filter_var()して検証します。

于 2009-09-26T02:37:46.780 に答える
0

http://code.iamcal.com/php/rfc822/

http://code.google.com/p/isemail/source/browse/trunk/is_email.php

于 2009-09-26T10:51:38.707 に答える