2014-02-06 40 views
0

我有一個用戶輸入其電子郵件地址的文本框。我需要防止人們使用某些電子郵件地址,因爲這是爲了企業(B2B)的使用。RegEx在放入ValidationExpression時停止工作

任何人都可以幫助我的RegEx,如果電子郵件地址包含@gmail或@yahoo會返回false嗎?

到目前爲止,我有這個(感謝@Sabuj)@(yahoo|gmail)\.但是當放入的RegularExpressionValidator它不工作:

<asp:RegularExpressionValidator ValidationExpression='@(yahoo|gmail)\.' runat="server" ControlToValidate="txt_email" /> 

看了MSDN更多的信息,我也試過,但它仍然返回true,則無論輸入的內容:

<asp:RegularExpressionValidator ValidationExpression='^(@(yahoo|gmail)\.)$' runat="server" ControlToValidate="txt_email" /> 
+0

*(只是一個建議)*,爲什麼不限制用戶使用特定域的電子郵件?該名單將是有限的*(我猜)*,並會阻止所有其他域名,無論是免費或付費。 – Habib

+1

http://www.regular-expressions.info/alternation.html – Robin

+0

感謝您的羅賓。這個表達式在獨立測試時似乎有效,但是當放置在ASP.Net控件 – EvilDr

回答

1

我拿出^.*@(?!(yahoo|gmail)).*$

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationExpression="^.*@(?!(yahoo|gmail)).*$" runat="server" ControlToValidate="txt_email" Text="No free email accounts allowed" /> 

這將允許任何文字來傳遞包含@yahoo@gmail驗證。

不要忘記在您的代碼中檢查Page.IsValid,並在您的.aspx中包含<asp:ValidationSummary runat="server" />

1

您可以使用此正則表達式來檢查電子郵件提到是否包含或不:

@(gmail|yahoo|mailinator|guerrillamail|dispostable)\. 
+0

發送。出於某種原因,當它被設置爲ValidationExpression值時,驗證器無法工作,並且僅僅對每個輸入的**值(例如me @ domain)返回true。com返回true)。這是我無法弄清楚的一點! – EvilDr

+0

我不太瞭解ASP。是否需要將正則表達式放在雙引號('「')中?或者是否需要在字符串內部跳過正則表達式字符@ @ –

1

由於電子郵件地址具有複雜的語法(比大多數人意識到的複雜,例如,它們可以包含註釋[RFC 822第3.4.3節]),所以我建議不要使用正則表達式。相反,請使用「正確的」電子郵件解析器,然後向解析器請求地址的域部分。

+0

我已經使用RegularExpressionValidator來檢查電子郵件地址這只是一個輔助檢查,可以防止系統被濫用 – EvilDr

+1

首先;我*真*不推薦使用正則表達式進行電子郵件地址驗證(請參閱http:// ex -parrot.com/~pdw/Mail-RFC822-Address.html)。如果你真的想使用正則表達式,那麼你是否可以寫出第一個正則表達式來執行此驗證? – Biffen

+0

你是否通過ping地址來驗證?我在Google上看到,大多數排名靠前的驗證者只是RegEx的一個界面,但是你的鏈接促使我們進一步思考,所以謝謝你的支持 – EvilDr

2

使用此:

<asp:RegularExpressionValidator ValidationExpression=".*@(?!(yahoo|gmail)).*" ControlToValidate="txt_email" runat="server" ErrorMessage="Yahoo and Gmail disallowed"></asp:RegularExpressionValidator> 

驗證表達式屬性應該設置爲整個字符串相匹配。

但我的正則表達式.*@(?!(yahoo|gmail)).*匹配整個電子郵件。所以它的工作:)

你不需要^$因爲字符串將是一個單一的行。

另外不要忘記添加type="email"到您的txt_email。它會自動處理它是否是有效的電子郵件。

如果出現錯誤消息,那麼它是無效的,但如果它沒有出現,那麼它是絕對有效的。

+0

謝謝,但它似乎工作錯誤。例如,「我@ yahoo.com」是不允許的,但是「me @ mysite.com」沒問題。然而你的表情正在逆向工作! – EvilDr

+0

隊友,它的工作。 –

+0

@EvilDr我會給你發快照。 –