我想要一个正则表达式来检查用户电子邮件地址的第一部分(在@符号之前)。
只有字符数字和“。”符号是有效的。我尝试了一些但是还不够。
这是我的表达,但问题是用户可以提交多个点,例如“example..test”,“ex ... amp..le”。
"/^[a-zA-Z0-9.]+$/"
编辑:我不想允许下划线或类似的内容。
答案 0 :(得分:2)
要禁止重复的字符,可以使用否定断言:
if (preg_match('/(?!.*\.\.)^[a-z0-9.]+$/', $inbox_name)) {
// valid, probably
}
这允许将句点作为第一个字符,但在电子邮件地址中是不允许的,因此您必须进一步优化它:
if (preg_match('/(?!.*\.(\.|$))^[a-z0-9][a-z0-9.]*$/', $inbox_name)) {
// valid, probably
}
说明:
使用filters而非尝试推送自己的电子邮件地址验证:
var_dump(filter_var('ex..ample@example.org', FILTER_VALIDATE_EMAIL));
// bool(false)
var_dump(filter_var('ex.ample@example.org', FILTER_VALIDATE_EMAIL));
// string("ex.ample@example.org")
之后,在您尝试发送电子邮件之前,您仍无法保证电子邮件地址确实有效(即便如此,这可能是误报)。
我不想允许下划线或类似的东西。
这种说法只是荒谬的;它们在电子邮件地址中有效,您实际上没有理由阻止它超出个人喜好。
答案 1 :(得分:1)
^(?=[^.]*\.[^.]*$)[a-zA-Z0-9.]+$
你可以试试这个。这只允许一个.
。
$re = "/^(?=[^.]*\\.[^.]*$)[a-zA-Z0-9.]+$/m";
$str = "asdasd.asdasd.\nasdsad.asdasd\nasdsadsad.asdasd.sa.d.";
preg_match_all($re, $str, $matches);
答案 2 :(得分:0)
试试这个:
"/^[a-zA-Z0-9]+(\.[a-zA-Z0-9_-]+)*$/"
必须支持 Hyphens
和underline
,并且电子邮件必须首先以alphanumeric character
开头。
答案 3 :(得分:0)
你可以试试这个
'/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/'
以下是一些输出:
$a = "sf..sf@g.com"
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $a));
int(0)
$b = "sf.sf@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $b));
int(1)
$c = "sff.@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $c));
int(0)
$d = "sff..@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $d));
int(0)
$e = "adeade@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $e));
int(1)
$f = "a.b.c@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $f));
int(0)