@
メールアドレスが入力ボックスに入力されたときに記号が含まれているかどうかを確認するにはどうすればよいですか? 私はPHPを使用しています。
これが私のphpコードです。
if (isset($_POST['email']) && strlen($_POST['email']) <= 255)
@
メールアドレスが入力ボックスに入力されたときに記号が含まれているかどうかを確認するにはどうすればよいですか? 私はPHPを使用しています。
これが私のphpコードです。
if (isset($_POST['email']) && strlen($_POST['email']) <= 255)
シンプルに使用できます:
filter_var($email, FILTER_VALIDATE_EMAIL)
絶対に正規表現を使用する必要がある場合は、私が推奨するよりも (これは、電子メール アドレスの検証に正規表現を使用してはならないことを示すためです):
"/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?
[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?
[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-
\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-
\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-
\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-
\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-
9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-
9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-
9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-
9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-
9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD"
if(strstr($email,"@"))
{
// true
}
メールに問題がないかどうかを確認するより良い方法は、この正規表現を使用することです
\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
preg_match() で
Loose の代わりに preg を使用してこれをチェックしたいかもしれませんstrpos($_POST['email'],"@")
:
if (preg_match($_POST["email"],"/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i")) {
// do stuff
}
strstrのドキュメントからの引用です。「特定の針が干し草の山の中で発生するかどうかだけを判断したい場合は、代わりに、より高速でメモリ消費の少ない関数strpos()を使用してください。」
私が気付いたstrposのもう1つのことは、$needleが$haystackの0番目の位置にある場合、単純なチェックが失敗するため、strposの真偽をチェックするだけでは安全ではないということです。タイプもチェックする必要があります(少なくとも私はチェックします)。これにより、「notfoundfound」が出力されます。
<?php
$str = 'foobar';
if (strpos($str, 'foo')) {
echo 'found ';
} else {
echo 'notfound ';
}
// proper...
if (strpos($str, 'foo') !== false) {
echo 'found ';
} else {
echo 'notfound ';
}
この正規表現はrfc2822を実装しています:
[a-z0-9!#$%&'*+/=?^_
{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_
{|}~-]+)*@(?:a-z0-9?.)+a-z0-9?
ただし、実際には、Web ページを介して電子メール アドレス (より具体的には ADDR-SPEC) を取得する目的には、これの方が適していると思います。
^[a-z0-9._%+!$&*=^|~#%\'`?{}/-]+@[a-z0-9.-]+.[az]{2,6 }$
私の無料の PHP 関数を使用してis_email()
アドレスを検証してください。こちらからダウンロードできます。RFC 5321 を完全に実装する正規表現が見つからないため、正規表現は使用しません。
is_email()
アドレスが RFC 5321 に完全に準拠していることを確認します。オプションで、ドメインが実際に存在し、MX レコードがあるかどうかを確認することもできます。
ユーザーの電子メール アドレスが実際に存在するかどうかを確認するために、バリデーターに頼るべきではありません。一部の ISP は、特にラテン アルファベットを使用していない国で、準拠していないアドレスをユーザーに提供しています。電子メールの検証に関する私のエッセイの詳細はこちら: http://isemail.info/about .
これは、PHP で電子メールの検証チェックを行う方法です。
function check_email($email) {
// Remove trailing and leading spaces.
$email = trim($email);
// Must have an @ sign.
$at = strpos($email, '@');
if( $at === false )
return 1; //false;
list($mailbox, $hostname) = explode('@', $email);
// Check that there is a mailbox and a hostname
if( $mailbox == '' || $hostname == '' )
return 2; //false;
// Only one @ allowed
if( strpos($hostname, '@') !== false )
return 3; //false;
// Must be a . in the hostname
if( strpos($hostname, '.') === false )
return 4; //false;
// Can't have a double in either mailbox or hostname
if( strpos($hostname, '..') !== false || strpos($mailbox, '..') !== false )
return 5; //false;
// Mailbox can't start or end with a .
if( substr($mailbox, 0, 1) == '.' || substr($mailbox, strlen($mailbox)-1, 1) == '.' )
return 6; //false;
// Hostname can't start or end with a .
if( substr($hostname, 0, 1) == '.' || substr($hostname, strlen($hostname)-1, 1) == '.' )
return 7; //false;
// Check that all characters are valid
if( str_replace(' ' , '', strtr(strtolower($mailbox), 'abcdefghijklmnopqrstuvwxyz0123456789!#$%&\'*+-/=?^_`{|}~.', ' ')) != '' )
return 8; // false;
if( str_replace(' ' , '', strtr(strtolower($hostname), 'abcdefghijklmnopqrstuvwxyz0123456789_-.', ' ')) != '' )
return 9; //false;
return 0; //true;
}
これは私が使用するものです。完璧に動作します。
public function valid_mail($mail)
{
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $mail))
{
return false;
} else {
return true;
}
}