簡體   English   中英

C#正則表達式為法語小數

[英]C# Regex for a french decimal

我一直花費數小時來處理這個問題,到處尋找......我的問題很簡單:我們想檢查一下用戶輸入了一個好號碼。 它可以是整數或小數,comas不是點,而是昏迷后的無限數。

我試過這個

 Regex decimalRegex = new Regex(@"\d+(,\d+)?");

我認為這樣可以,但是例如:如果我嘗試使用IsMatch,則2,324e是真的。 此外它在點和昏迷之間沒有區別所以這個2.23可以用我的正則表達式的IsMatch。

但是我想要允許這個例如2號:

2
2,2
2,3243241428483248
31324,232332 (infinite numbers before and after)

並禁止:

2.2
2,2434214e (any letter)

並且理想地禁止(我認為?會做到這一點,但事實並非如此)......

2,2,2 or
2.2.2

只允許一個昏迷......否則我就是法國文化

正則表達式中的任何冠軍會有什么建議嗎? 我甚至下載了Expresso來完成這項工作,但我不能......

你需要錨定表達式:

Regex decimalRegex = new Regex(@"^\d+(,\d+)?$");

如果沒有^在開頭而$在結尾處,則允許表達式匹配您正在測試的字符串的任何子字符串。 錨點一起禁止子串匹配。

換句話說,您的原始表達式將匹配包含至少一個數字的任何字符串。

為什么不在設置正確的文化后使用Int32.TryParse()或Double.TryParse()? 在你的問題中,你已經說過一個Int或一個Double,但后來說了一個'逗號后的無限數字'。 這些可能不是Ints或Doubles,具體取決於它們的范圍,TryParse也會為您進行范圍檢查......

你幾乎走在正確的軌道上; 你需要的正則表達式是@"^(\\d+(,\\d*)?|,\\d+)$" ^$強制正則表達式匹配字符串的開頭和結尾,所以不允許任何額外的。 如果沒有這些,你的正則表達式將在1,2e匹配1,2 ,並認為這是正常的 - 這也是為什么2,2,2正在工作,因為它匹配前2,2和忽略其余。 這就是為什么2.2.2匹配 - 正則表達式匹配2 ,並忽略其余部分。 基本上,錨點非常有用:-)我改變的另一件事是添加一個,\\d+子句,它允許你匹配表單的數字,123 如果您不想這樣,請將其取出( @"^\\d+(,\\d*)?$" )。 同樣,如果您不想匹配123,則將*更改為+@"^\\d+(,\\d+)?$" )。

如果您對其他解決方案持開放態度,您可以采用Ian的建議並使用現有功能; 我也建議用[.,]替換,以便人們可以輸入1,21.2 ,因為這不會對任何事情造成任何傷害,但會讓一些人的生活更輕松。 (除非你真的擔心成千上萬的分隔符,或者有一些深刻的理由不想要第二個。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM