2013-07-22 74 views
1

我有一個輸入字段,用戶可以輸入不同格式的時間(800,08:00,08:00 am等)。我需要顯示用戶輸入的時間格式(xx:xx am/pm)。使用正則表達式將整數拆分爲多個部分

例子:

1.'800'=>'08:00'; 
2.'1245'=>'12:45'; 
3.'1000 am'=>'10:00 am'; 
4.'10.00 am'=>'10:00 am'; 
5.'9 am'=>'09:00 am'; 

所以,我可以輸入「800」,它會轉換爲「8:00」我也可以輸入「2145」,它會轉換爲「21:45 」。

我試圖與str.split(/[:;,. \/]/);,但只有在例如4

回答

3

您可以使用正則表達式來分析字符串到它的組成部分:

var myregexp = /^(\d{1,2}?)\D?(\d{2})?\b\s*([ap]m)?$/; 
var match = myregexp.exec(subject); 
if (match != null) { 
    hours = match[1]; 
    minutes = match[2]; 
    ampm = match[3]; 
} 

說明:

^   # Start of string 
(  # Capture into group 1: 
\d{1,2}? # one or two digits, preferably one 
)   # End of group 1 
\D?  # Match an optional non-digit 
(  # Capture into group 2: 
\d{2} # Exactly two digits 
)?  # End of (optional) group 2 
\b  # End of number 
\s*  # Optional whitespace 
(  # Capture into group 3: 
[ap]m # am or pm 
)?  # End of (optional) group 3 
$   # End of string 

然後,您可以使用結果來建立一個新的,標準化的字符串,它在這種情況下是指

  • 如果小時部分是加零個位數
  • 加入00如果分部分undefined
  • 決定做什麼,如果am/pm部分undefined

正則表達式不能完成這部分練習,因爲正則表達式只能匹配存在於原始字符串中的文本,而不能動態添加到它。

+0

不能正常工作。你有沒有使用「1000 am」進行測試 – AnaMaria

+0

@AnaMaria:是的:http://jsfiddle.net/fLvqk/ –

+0

@TimPietzcker在'9 am'的情況下工作不正常。你將如何更改regEx? –

0

你不能用正則表達式做到這一點的情況下,這是適用的。您將需要編寫一個函數來將一些邏輯應用於輸入字符串,並決定將其轉換爲什麼時間。你的一些可能的輸入是

  • 上午12:00
  • 12日上午
  • 4:40
  • 4.40

等,這需要由你在一個函數中完成。

+0

我同意。當您確定輸入類型或正則表達式本身時,Reg ex才起作用。這裏都是可變的。所以你必須申請邏輯 – AnaMaria

相關問題