2013-07-22 67 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

相关问题