将Javascript正则表达式转换为PHP正则表达式?

时间:2017-03-29 02:10:35

标签: javascript php regex preg-match

我正在使用emailregex.com中的以下正则表达式验证我网站上的电子邮件。它的工作就像JS中的魅力,但我无法在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 = "/^(([^<>()\[\]\\.,;:\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,}))$/"

2 个答案:

答案 0 :(得分:2)

在正则表达式文本周围使用单引号'而不是双引号"

  $emailRegex = '/^(([^<>()\[\]\\.,;:\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,}))$/';

因为您在正则表达式中使用了"

否则您还需要"

逃离\"

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

答案 1 :(得分: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

您可以选择在客户端使用type =“email”输入。使用表单上的 novalidate 属性禁用验证可防止浏览器根据其内容的有效性更改输入的外观,但仍允许您使用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>