2017-03-29 240 views
-1

我使用emailregex.com中的以下正则表达式来验证我网站上的电子邮件。它像JS中的魅力一样工作,但我无法在PHP中使用它。将JavaScript正则表达式转换为PHP正则表达式?

/^(([^ <>()[] \;:\ S @ “] +([^ <>()[] \;:\ S @”] + )*)|())@(([0-9] {1,3} [0-9] {1,3} [0-9] {1,3} [0 “+。”。 -9] {1,3}])|(([a-zA-Z-0-9] +。)+ [a-zA-Z] {2,}))$/

从我看到的问题是反斜杠,当它加入引号时,它一直试图逃避它。 Regex101显示它正在工作,它只是一个如何进入PHP的问题。

任何帮助将是伟大的,谢谢!

PHP代码:

$emailRegex = "/^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/" 
+0

从工作不 – diavolic

+0

@diavolic看帖子的PHP脚本代码后,即VAR将在'的preg_match(使用)',但问题是不匹配,那就是该字符串正试图逃脱,我不知道如何使它不会被转义。 –

+0

如果你不能立即转换它 - 一步一步地做,一个接一个地转换孤立的部分。 – zerkms

回答

2

使用单引号'各地正则表达式的文本,而不是双引号"

$emailRegex = '/^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'; 

因为你已经使用在你的正则表达式"

否则,您需要逃生"也由\"

现场演示:https://eval.in/763141

+0

测试你的正则表达式警告:preg_match():未知修饰符'^'' –

+0

请提供任何现场演示,如eval.in – C2486

+0

https://eval.in/763131 –

0

请勿使用常规exprssion。

使用PHP的filter_var功能:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    echo "This ($email) email address is considered valid.\n"; 
} 

编号:http://php.net/manual/en/filter.examples.validation.php

您可以选择使用在客户端类型= “电子邮件” 输入。通过表单上的未验证的属性禁用验证可防止浏览器根据其内容的有效性更改输入外观,但仍允许使用JavaScript进行测试。

var statusDiv = document.getElementById("status"); 
 
document.getElementById("email").addEventListener("change", function(evt) { 
 
    statusDiv.textContent = this.checkValidity() ? "Valid" : "Not valid"; 
 
});
<form novalidate> 
 
    <label for="email">Email</label> 
 
    <input type="email" autocomplete="email" id="email"> 
 
</form> 
 
<div id="status"></div>

+0

想到了这个选项,并让它工作,但我想我的后端验证匹配我的前端验证。正则表达式的工作原理似乎并没有显示任何问题。 –

+0

@JoeScotto - 您是否在客户端使用了type =“email”的输入? – user2182349

+0

不,我想控制我的验证从JS保持内联与我的PHP验证。来自电子邮件类型的消息也与我的网站的整个设计混淆 –

相关问题