我真的不明白正則表達式如何放在一起,所以這裏是我的問題。正則表達式匹配字符串與兩種分隔符類型分隔
我有一個分隔字符串爲1,3;5,1;6,4
等等。基本上我在這裏存儲購物車的產品ID和卷。 1
,3
將意味着我有一個產品編號爲"1"
和數量3
。產品(帶卷)用";"
分隔。
我需要做的是把一個正則表達式,將驗證這樣的字符串。只有正數是有限制的,比如說從1到10000.
有沒有人有解決方案?
我真的不明白正則表達式如何放在一起,所以這裏是我的問題。正則表達式匹配字符串與兩種分隔符類型分隔
我有一個分隔字符串爲1,3;5,1;6,4
等等。基本上我在這裏存儲購物車的產品ID和卷。 1
,3
將意味着我有一個產品編號爲"1"
和數量3
。產品(帶卷)用";"
分隔。
我需要做的是把一個正則表達式,將驗證這樣的字符串。只有正數是有限制的,比如說從1到10000.
有沒有人有解決方案?
此正則表達式模式上分號分隔的數對,其中一個逗號每對的成員分離相匹配,並且每個數爲1〜10000:
^([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000)(;([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000))*$
必須有至少一對。如果只有一對,則不會有分號。分號只能出現在相鄰對之間。
非常感謝。那正是我所期待的。 – user2069866 2013-02-14 06:57:13
不客氣! – kol 2013-02-14 07:29:29
我不確定如果我理解你的格式是如何工作的,但是如果每件事都必須有ID [ID],[volume]; [ID],[volume];那麼我會說使用像一個正則表達式:
(([0-9]),([0-9]);)+
但你的1,3;5,1;6;4
例子似乎並沒有遵循這一格式,所以如果你想要的音量是可選的,那麼:
(([0-9])(,[0-9])?;)+
應該工作。如果您想嘗試正則表達式模式的話,我會建議使用在線工具,如http://regexpal.com
我想你最好不要使用正則表達式這是。假設你的格式是這樣1,3;5,1;6,4
(即不因爲你已經在你的問題中指定其他@Rich指出的),你就應該能夠將其分割上;
然後,
:
var input = "1,3;5,1;6,4";
var pairs = input.Split(';') // ["1,3","5,1","6,4"]
.Select(x => x.Split(',')) // [["1","3"],["5","1"],["6","4"]]
.Select(x => new { Id = x[0], Volume = x[1] }); // [{ Id : "1", Volume : "3"} ...]
foreach(var pair in pairs)
{
Console.WriteLine("Id: " + pair.Id + " Volume: " + pair.Volume);
}
// Id: 1 Volume: 3
// Id: 5 Volume: 1
// Id: 6 Volume: 4
注意:我在這裏使用了System.Linq
和匿名類型,但如果您願意,您可以不使用。
注意另:這將失敗(即拋出IndexOutOfRangeException
)如果您的輸入不是預期的格式。如果您想驗證一些狡猾然後輸入一個正則表達式是可能是你想要 - 其他@裏奇的回答對我來說很好。
感謝您的回覆。以上運作良好。我唯一的問題是我正在閱讀cookie中的分隔字符串,並且只是想確保用戶在閱讀之前不會更改它。無論如何,@ kol給了我下面的確切正則表達式。 – user2069866 2013-02-14 06:59:19
是的,如果您需要驗證某些輸入與您的格式匹配,那麼正則表達式是正確的工具。 – RichardTowers 2013-02-14 10:19:55
讓我們來說說你試過了什麼? – 2013-02-13 20:36:15
歡迎,如你所見,你不會有太多的運氣,要求徹底解決還沒有嘗試過的問題。你應該做的是嘗試它你自己,當你來到可以在一個具體的問題,回報掛接一個障礙點,你可能會得到很多幫助。 – ChiefTwoPencils 2013-02-13 20:54:35