我有一个输入字段,用户可以用不同的格式输入时间(800,08:00,08:00 am等)。我需要显示用户输入的时间格式(xx:xx am /时)。
示例:
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的情况。
答案 0 :(得分: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
时该怎么办。正则表达式不能执行此练习的这一部分,因为正则表达式只能匹配原始字符串中存在的文本,而不是动态添加到文本中。
答案 1 :(得分:0)
您无法使用正则表达式执行此操作。您需要编写一个函数来将一些逻辑应用于输入字符串并确定将其转换为的时间。您可能的一些输入是
等。这需要你在一个函数中完成。