2016-09-16 56 views
-1

我試圖用正則表達式驗證電子郵件地址檢查電子郵件地址,爲電子郵件地址的規則之一是,他們可以在「@」符號之前有一個可選的號碼。但是,當程序獲得該評估時,該數字從不是可選的。自選號碼

我目前有:

Regex.IsMatch(user.EmailAddress, Regex.Escape(basicExpected) + @"^\d{1}?$" + "@email.com") 

basicExpectedstring basicExpected = user.GivenName + "." + user.Surname;

這樣的電子郵件地址應該是

first.last {可選number}@email.com

作爲dumby數據的兩個例子LES是:

第二李四得到一個2,因爲有兩個人在Active Directory中的名稱John Doe所以這個數字是兩者之間的僞裝差異。當評估跑[email protected]將被確定爲不正確由於缺乏一些

更新: 我做閱讀$?擺烏龍所以\d?是正確的我只是不停誤讀。我爲我的錯誤表示歉意,並感謝您對我在尋找解決辦法堅持

+1

刪除'^'和'$'錨。 '「\ d?「''就夠了,在@之前還有一段時間,它不符合格式 – revo

+0

我想不出一個需要'{1}'的實例,前面的字符/組已經有了已經匹配一次@revo是正確的錨,這些都假設匹配你的字符串的開始和結束 – chris85

+0

@revo我切換到「\ d?」,但留下了@,是不是在asp中需要嗎?保持@不工作,現在就試試 – BlueBarren

回答

1

你的問題是,你的量詞不表明數量是可選的,它說這是懶惰的,而不是貪婪。

\d{1}? # this is incorrect 

正則表達式中可選的單個數字更容易構造。試試這個:

\d? # this is preferable 
+0

Hrm,它看起來像你和我在同一時間連續兩次寫了完全相同的答案,我會刪除我的:) –

+0

我試過\ d?和評估仍然會返回false與我的虛擬數據,沒有號碼 – BlueBarren

+0

您是否嘗試過沒有線錨?(即'^'和'$')? – wpcarro

0

如果我沒有看錯我解釋說:

first.last{optional number}@email.com

user.GivenName + "." + user.Surname + "^\d{1}?$" + "[email protected]" 

匹配我看到一些問題在這裏:

  • "^\d{1}?$":在^$意味着開始和結束。你不需要,因爲你周圍有其他東西。
  • 「@ email.com」:爲什麼第一點.

結論:

"\d?"是你想要的條件數量和取出.@ email.com可能有助於

+0

因此'@ email.com'之前的'.'是偶然的,現在它已被刪除。我現在使用'「\ d?」'但無濟於事,它仍然不起作用。 – BlueBarren