2012-06-10 24 views
0

我被困在特殊的問題,我有用戶名字段只有字母數字和。 - 和_是允許的,應始終以字母開頭正則表達式來匹配電子郵件

這裏的例子是接受什麼

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

我做了什麼到現在是

[a-zA-Z0-9]+[._-]{1,1}[a-zA-Z0-9][email protected] 

此匹配除的問題,我的所有要求它劑量匹配

[email protected] 
[email protected] 

但它甚至匹配

[email protected] 

不要求我真的沒有得到如何解決這件事我想是

[a-zA-Z0-9]+[._-]{0}[a-zA-Z0-9][email protected] 

,但這也沒有解決我的問題,現在它接受像

[email protected] 
一切

這是不需要的請幫我

+1

電子郵件的正則表達式很棘手。請參閱本教程http://www.regular-expressions.info/email.html – flowfree

+0

這是什麼 - 驗證*任何*電子郵件地址,或檢查特定網站的用戶名? –

+0

如果你還沒有,你可以考慮使用[Regex分析器](http://stackoverflow.com/questions/772594/regular-expression-explained-with-words)通過你的正則表達式對樣本數據。正則表達式教練告訴我*沒有在7 *上爲someone @ mydomain.com進行子匹配,並突出顯示了[._-] {1,1}'塊。 –

回答

1

如果你想使-.可選的,那麼你必須更換{1,1}(量詞:一次):這裏有?(一個或沒有量詞):

[a-zA-Z0-9]+[._-]?[a-zA-Z0-9][email protected] 

的原因,這正則表達式也匹配短地址,而不分隔符-._是,你不」斷言整個字符串,但只是其中的一部分。使用開始^並結束$錨:

^[a-zA-Z0-9]+[._-]?[a-zA-Z0-9][email protected]\.com$ 
+0

嘿感謝這工作我試過了?早些時候,但不知何故,它不工作,我想有一些其他的錯誤,但反正它現在好,現在感謝 – sohaan

+0

將失敗的''a @ domain.com'',''jean.claude.van.damme @ domain.com''和'bob @ maketing.department @ domain.com',這些都是有效的電子郵件 –

1

這就是爲什麼我們有filter_var($email, FILTER_VALIDATE_EMAIL)

如果電子郵件地址是有效的,那麼你只需要檢查它是否以@domain.com結束。這可以通過strrpos($email, '@domain.com')完成。

+0

這不是OP要求的。一個域名和一個受限制的地址格式被聲明,而不是所有有效的電子郵件地址變體。 – mario

+0

是的,我不驗證所有有效的電子郵件地址,但只有那些我指定的,但無論如何謝謝 – sohaan

+0

OP沒有指定無效的電子郵件,所以這種假設是正確的。給予好評。 – madfriend

相關問題