2017-03-29 239 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驗證。來自電子郵件類型的消息也與我的網站的整個設計混淆 –

相關問題