2015-02-06 53 views
0

我想格式化用戶輸入的日期。Regex.Replace - 更正日期格式的模式

  • d/M/YYYY:以下面的格式被提供 日期(即:1/1/2012,但也可以是還2012年12月1日或2012/1/12)
然而

我需要他們轉換爲:

  • DD/MM/YYYY(即:01/01/2012)

我設法做到這一點在非正則表達式的方式,像這樣:

string date = "1/1/2012"; 

    if (date.IndexOf("/") == 1) 
    { 
     date = "0" + date; 
    } 
    if (date.Substring(4, 1) == "/") 
    { 
     date = date.Insert(3, "0"); 
    } 

我真的很想知道如何用Regex.Replace做到這一點,因爲它可能會更整潔。

我累的下面不同的變化:

string date = "1/1/2012" 

    date = Regex.Replace(date, @"\d{1}/", "0$&"); 

以上的工作,但如果日期是2012年12月1日,它也將使102出12.如果我添加^在模式的開始我沒有得到第二個數字的改變。我也在開始時嘗試與[^ | /]組合,但也沒有運氣。所以目前它是或者。

+1

我會用不同的格式嘗試解析 - 你有沒有考慮過這個? – weismat 2015-02-06 14:14:18

+0

我沒有 - 會調查它。然而,這個問題純粹是爲了找出如何使用Regex.Replace(),謝謝。 – CallMeBob 2015-02-06 15:56:37

回答

1

使用單詞字符和非單詞字符匹配的單詞邊界\b

date = Regex.Replace(date, @"\b\d/", "0$&"); 

OR

date = Regex.Replace(date, @"\b(\d)/", "0$1/"); 

DEMO

+0

作品,非常感謝。 – CallMeBob 2015-02-06 15:57:55

+0

很高興它解決了...... – 2015-02-06 15:59:24

1

如果你確定傳入格式的,我會用DateTime.ParseExact代替,然後使用.ToString()重新格式化日期:

DateTime dt = DateTime.ParseExact(input, "d/M/yyyy", CultureInfo.CurrentCulture); 

string reformatted = dt.ToString("dd/MM/yyyy"); 
+0

謝謝你,但我其實想知道如何使用Regex.Replace() - 儘管我一定會考慮你的建議:) – CallMeBob 2015-02-06 15:51:57