正则表达式,用于验证电子邮件并添加点符号

时间:2019-03-06 19:09:50

标签: php validation

每个人都需要只允许使用字符串,数字和点“。”。在我的电子邮件中

'email' => 'required|string|email|unique:users|not_regex:/^.+$/i|regex :/^.+@.+$/i',

我的代码此处不允许使用“。”我只允许“。”并阻止其他人 [#/ \ $%^&*等]

1 个答案:

答案 0 :(得分:1)

如今,您实际上不需要正则表达式来验证由电子邮件地址组成的字符串,该电子邮件地址应仅包含字母,数字以及@和点符号。当您两次应用filter_var()时,PHP会进行适当的验证,首先是对数据进行清理,然后再次进行验证,如下所示:

<?php
// Variables to check
$emailA = "john1.doe@example.com";
$emailB = "john1.doe@example#.com";

// Remove all illegal characters from email
$emailValid = filter_var($emailA, FILTER_SANITIZE_EMAIL);
$emailInvalid = filter_var($emailB, FILTER_SANITIZE_EMAIL);

// Validate e-mail
if (filter_var($emailValid, FILTER_VALIDATE_EMAIL)) {
    echo("$emailValid is a valid email address"),"\n";
} else {
    echo("$emailValid is not a valid email address");
}
if (filter_var($emailInvalid, FILTER_VALIDATE_EMAIL)) {
    echo("$emailInvalid is a valid email address");
} else {
    echo("$emailInvalid is not a valid email address");
}

请参见live code

注意,如果这段代码看起来很熟悉,我承认我修改了给定here的示例:)

但是,如果您坚持使用正则表达式,则可以使用以下一种方法:

<?php

$emailA = "john1@here.com";
$emailB = "john1@here#.com";

function validateEmail( $email ){
$regex =  "/^[a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}/";
$error =   "\nOnly letters, numbers, dot and @ are allowed"; 

echo (preg_match($regex,$email))?  "$email is valid\n" : "$error - $email is invalid\n";

return true;
}

validateEmail( $emailA );
validateEmail( $emailB );

请参见live code

无论电子邮件有效还是无效,validateEmail()返回true似乎都有些奇怪。如果需要验证该函数是否实际执行,则返回值可能很有用;参见示例here