2016-09-14 70 views
1

與形式,我有這樣的兩個領域:的正則表達式不匹配

@Html.TextBoxFor(model => model.HouseNumberSuffix) 
@Html.TextBoxFor(model => model.PhoneNumber) 

,該頁面此字段具有以下的正則表達式

[RegularExpression("[A-Za-z0-9]*[0-9]+[A-Za-z0-9]*", 
ErrorMessage = "At least one digit is required for this field")] 
    public string HouseNumberSuffix { get; set; } 

[RegularExpression("[0-9]+", ErrorMessage = "Only numbers allowed")] 
    public string PhoneNumber { get; set; } 

這樣的模型當我試圖提交表單時,上面的字段是無效的,即使我不在他們的文本框內寫任何東西。我想修改正則表達式來接受空字符串。直到現在我已經試過: regex allow only numbers or empty string, Regex, Number or Empty
謝謝!

+1

加號需要至少**一個**字符,所以將它改爲'[A-Za-z0-9] *'會對第一個有幫助,第二個對於[0-9] *'有幫助。但是,這樣,第一個也只允許字母。你可能也想分別用'^'和'$'來錨定字符串。 – Jan

+0

@Jan爲什麼不把它寫成答案;這就是我要說的如果我正在寫一個答案 – SpoonMeiser

+0

@SpoonMeiser:做到了。 – Jan

回答

1

的加需要至少一個字符,所以將其改爲[A-Za-z0-9]*將有助於第一個和[0-9]*第二個。但是,這樣,第一個也只允許字母。您可能還需要分別使用^$來固定字符串。


作爲@Simon指出,這並沒有真正回答你的問題,所以第一下面的表達式將工作:

(?:(?=^$)|(?=^\D*\d))^\w*$ 
# either an empty string 
# or at least one digit in the lookaheads 
# afterwards only digits and letters are allowed 

a demo on regex101.com

+0

通過這樣做,您就失去了這個條件「此字段至少需要一位數字」。 [A-Za-z0-9] *匹配「」(無),但也「abc」(無數字) –

+0

@SimonPA:這正是我的答案中寫的:**然而,這樣,第一個也會允許只有信件。** – Jan

+0

所以你提出一個答案,不回答... –

1

匹配0或1時的模式:

([A-Za-z0-9]*[0-9]+[A-Za-z0-9]*)? 

([0-9]+)? 

()用於分組表達式的邏輯和 ?爲0或1