2015-12-14 72 views
-1

我使用RegularExpression attribute驗證我的視圖模型中一個輸入上的多個電子郵件地址。 ErrorMessage不斷出現在現場。我已經在5個不同的在線測試網站上驗證了我的RegEx,並且他們都測試了正面。C#正則表達式屬性不按預期方式工作

這裏是我的代碼:

[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;\s]+\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*){0,7}", ErrorMessage = "Please enter a valid email address. For multiple addresses please use a comma or semicolon to separate the email addresses.")] 
public string EmailAddresses { get; set; } 

如果我進入它的工作原理,如果我輸入兩個電子郵件地址,沒有它的工作空間的電子郵件地址,但如果我添加一個空格它打破。我添加了'\ s'來包含空格,它在我嘗試過的在線測試人員上工作,但在我的應用程序中不起作用。

預期有效的結果應該是: '[email protected][email protected][email protected]'

然而,這是回來爲無效。如果我使用完全相同的序列並且沒有空格,那麼它是有效的。

Kendo UI在發送給控制器之前檢查表單的驗證。

任何幫助非常感謝。先謝謝你。

+0

'\ s'還允許換行符,垂直製表符,換頁符以及其他幾個符號。你確定你想要那些包含在你可以接受的比賽嗎? –

+0

它怎麼「打破?」給我們一些例子輸入和輸出與你的期望。它是邏輯正則表達式還是一些代碼? – ps2goat

+0

@ ps2goat,這裏有一些例子.... [email protected],[email protected]; [email protected](這是無效的) test @ test.com,test2 @ test.com; [email protected](這是有效的) –

回答

0

嘗試這種模式:

"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"

+0

同樣的問題。當我添加空格時,正則表達式失敗。 –

+0

它很奇怪,因爲這個模式測試了空格和電子郵件的所有可能的變體。您是否想要在頁面上的一個文本字段中放置多個電子郵件? – Andrew

+0

正確,我允許他們將多個電子郵件地址放在一個由逗號或分號分隔的文本字段中。雖然我知道還有其他選擇,但這是產品所有者想要的並且不會屈服的選項。 –

0

你並不需要 「@」 符號。我在http://regexstorm.net/tester測試了您的模式,並且它與[email protected][email protected][email protected]正確匹配。使用下面的構造

public class LoginViewModel 
{ 
    [RegularExpression("\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;\s]+\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*){0,7}", ErrorMessage = "Please enter a valid email address. For multiple addresses please use a comma or semicolon to separate the email addresses.")] 
    public string EmailAddresses { get; set; } 

} 

對於它在ASP.NET MVC框架的工作確保你的有關於它來驗證idname屬性是必需的觀點

<input type="text" id ="EmailAddresses" name="EmailAddresses"/> 

以下。您可以像上面那樣手動執行此操作,或者使用@Html.EditorFor(model => model.EmailAddresses)這將爲您創建idname屬性

+0

「@」符號與什麼有什麼關係? –

+0

@zespri,我說他不需要@符號。這不是原因。如果你閱讀答案,我說「爲了在ASP.NET MVC框架中工作,確保你在視圖上進行以下操作......」並提供視圖中所需的內容。 「@」符號用於告訴編譯器保持字符串原樣。這個屬性不是必需的,因爲編譯器不會轉義任何東西,並且會按原樣使用。在這種情況下@不是必需的。 –

0

我發現問題。最後它與C#無關。問題是我在前端使用Kendo UI,在主帖中更新。基諾UI還必須接收由Andrew發送的RegEx更新以解決該問題。當他的RegEx爲我工作時,我會讓Andrew成爲正確的解決方案。由於我是新手,因此服務器端/客戶端方面的差異徹底改變了。感謝大家的幫助。

相關問題