我想知道如何在输入框中输入电子邮件地址时检查是否包含@
个符号?我正在使用PHP。
这是我的PHP代码。
if (isset($_POST['email']) && strlen($_POST['email']) <= 255)
答案 0 :(得分:6)
可以使用简单的:
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"
答案 1 :(得分:2)
if(strstr($email,"@"))
{
// true
}
查找电子邮件是否正常的更好方法是使用此正则表达式
\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
在preg_match()
中答案 2 :(得分:1)
您可能希望使用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
}
答案 3 :(得分:0)
仅引用strstr上的文档。 “如果您只想确定特定针是否出现在haystack中,请使用速度更快,内存更少的函数strpos()代替。”
strpos的另一件事我注意到,只检查strpos的真实性是不安全的,因为如果$ needle位于$ haystack的第0位,则简单的检查将失败。你也必须检查它的类型(至少我这样做)。这将打印“未找到发现”。
<?php
$str = 'foobar';
if (strpos($str, 'foo')) {
echo 'found ';
} else {
echo 'notfound ';
}
// proper...
if (strpos($str, 'foo') !== false) {
echo 'found ';
} else {
echo 'notfound ';
}
答案 4 :(得分:0)
此正则表达式实现rfc2822:
[A-Z0-9#$%&安培;!?'* + / = ^ _
{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_
{|}〜 - ]。+)* @(?:一个-Z0-9)+一个-Z0-9?
然而,在实践中,我发现这更适合通过网页捕获电子邮件地址(或更具体地说是ADDR-SPEC):
^ [!一个-Z0-9 ._%+ $&安培; * = ^ |〜#%\'`{} / - ] + @ [A-Z0-9 .-] + [AZ] {2,6-} $
答案 5 :(得分:0)
欢迎您使用我的免费PHP函数is_email()
来验证地址。可以下载here。它不使用正则表达式,因为我找不到完全实现RFC 5321的那个。
is_email()
将确保地址完全符合RFC 5321。它还可以选择检查域是否实际存在并具有MX记录。
您不应该依赖验证器来告诉您用户的电子邮件地址是否确实存在:某些ISP会向其用户提供不合规的地址,尤其是在不使用拉丁字母的国家/地区。更多关于电子邮件验证的文章:http://isemail.info/about。
答案 6 :(得分:-1)
这是您使用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;
}
答案 7 :(得分:-2)
这就是我使用的。效果很好。
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;
}
}