尝试使用正则表达式验证一个或多个电子邮件扩展

时间:2015-02-05 11:23:08

标签: regex forms validation expression preg-match

我让用户输入他们的电子邮件地址并尝试使用正则表达式和preg匹配功能对其进行验证。我无法获得验证不同电子邮件扩展名(hotmail,gmail,blueyonder等)的代码,因为我只能让它接受一个并且不能在代码中使用OR函数。我没有收到特定错误,但因为用户必须使用' gmail.co.uk'延期。有什么帮助吗?

代码:

<?php
$emailErr = "";
$email = "";

if(isset($_POST['submit'])){

if(empty($_POST["email"])) {
$emailErr = "Email is required";
}else{
$email = ($_POST["email"]);

if (!preg_match("/[a-zA-Z_-]+@[gmail]+.+[co]+.+[uk]/",$email)){
$emailErr = "Only letters and white space allowed";

}
}
}

?>
<html>

<head>

<title> symbol test</title>

<style>

.error {color: #FF0000;}

</style>

</head>

<body>

<form name = "testform" method="POST">

<p>Email:<input type="text" name="email" style="width:20%"/>
<span class="error">*<?php echo $emailErr;?></span>

    <p><br><input type="submit" name="submit" value="Submit"/></br></p> 

</form>

   <?php

 echo $email;

 ?>
 </body>

</html>

2 个答案:

答案 0 :(得分:1)

[gmail]不是实际的出路。这匹配g或m或a或i或l。

[a-zA-Z_-]+@gmail\.co\.\uk

必要时添加锚点。

if (!preg_match("~^[a-zA-Z_-]+@gmail\.co\.uk$~",$email)){

答案 1 :(得分:0)

如果您正在寻找一个通用的正则表达式来匹配所有类型的有效电子邮件ID,那么您可以尝试

^(?![\W_])((?:([\w-]{2,})\.?){1,})(?<![\W_])@(?![\W_])(?=[\w.-]{5,})(?=.+\..+)(?1)(?<![\W_])$

请查看regex demo以获取详细概述。