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。

4

2 回答 2

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.

正则表达式无法完成这部分练习,因为正则表达式只能匹配原始字符串中存在的文本,而不能动态添加。

于 2013-07-22T07:07:31.653 回答
0

你不能用正则表达式来做到这一点。您将需要编写一个函数来将一些逻辑应用于输入字符串并决定将其转换为什么时间。您的一些可能的输入是

  • 4
  • 12:00 AM
  • 1200
  • 上午 12 点
  • 4:40
  • 4.40

等等。这需要你在一个函数中完成。

于 2013-07-22T07:04:58.793 回答