如何使用正则表达式验证12小时格式的时间

12小时格式正则表达式模式中的时间

(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)

描述

(				#start of group #1
 1[012]				#  start with 10, 11, 12
 |				#  or
 [1-9]				#  start with 1,2,...9
)				#end of group #1
 :				#    follow by a semi colon (:)
  [0-5][0-9]			#      follw by 0..5 and 0..9, which means 00 to 59
            (\\s)?		#        follow by a white space (optional)
                  (?i)		#          next checking is case insensitive
                      (am|pm)	#            follow by am or pm

12小时制的时钟格式是从0-12开始,然后是半冒号(:),然后是00-59,最后是am或pm。

Java正则表达式示例

package com.mkyong.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Time12HoursValidator{
	
	  private Pattern pattern;
	  private Matcher matcher;
 
	  private static final String TIME12HOURS_PATTERN = 
                                "(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)";
	  
	  public Time12HoursValidator(){
		  pattern = Pattern.compile(TIME12HOURS_PATTERN);
	  }
	  
	  /**
	   * Validate time in 12 hours format with regular expression
	   * @param time time address for validation
	   * @return true valid time fromat, false invalid time format
	   */
	  public boolean validate(final String time){		  
		  matcher = pattern.matcher(time);
		  return matcher.matches();	    	    
	  }
}

符合的时间格式:

1.“ 1:00 am”,“ 1:00 am”,“ 1:00 AM”,
2.“ 1:00 pm”,“ 1:00 pm”,“ 1:00 PM”,
3.“下午12:50”

时间格式不匹配:

1.“ 0:00 am” –小时超出范围[1-12]
2.“上午10:00” –仅允许一个空格
3.“ 1:00” –必须以am或pm结尾
4.不允许“ 23:00 am” -24小时制
5.“下午1:61” –分钟超出范围[0-59]
6.“下午13:00” –小时超出范围[1-12]
7.“ 001:50 pm” –无效的小时格式
8.“上午10:99” –分钟超出范围[0-59]
9.“ 01:00 pm” –不允许24小时制
10.“ 1:00 bm” –必须以am或pm结尾

单元测试– Time12HoursValidatorTest

package com.mkyong.regex;

import org.testng.Assert;
import org.testng.annotations.*;
 
/**
 * Time 12 hours format validator Testing
 * @author mkyong
 *
 */
public class Time12HoursValidatorTest {
 
	private Time12HoursValidator time12HoursValidator;
    
	@BeforeClass
        public void initData(){
		time12HoursValidator = new Time12HoursValidator();
        }
	
	@DataProvider
	public Object[][] ValidTime12HoursProvider() {
		return new Object[][]{
		     new Object[] {"1:00am"}, new Object[] {"1:00 am"}, 
                     new Object[] {"1:00 AM"}, new Object[] {"1:00pm"}, 
                     new Object[] {"1:00 pm"},new Object[] {"1:00 PM"},
		     new Object[] {"12:50 pm"}
		};
	}
	
	@DataProvider
	public Object[][] InvalidTime12HoursProvider() {
		return new Object[][]{
			 new Object[] {"0:00 am"},new Object[] {"10:00  am"},
			 new Object[] {"1:00"},new Object[] {"23:00 am"},
			 new Object[] {"1:61 pm"},new Object[] {"13:00 pm"},
			 new Object[] {"001:50 pm"},new Object[] {"10:99 am"},
			 new Object[] {"01:00 pm"}, new Object[] {"1:00 bm"}
		};
	}
	
	@Test(dataProvider = "ValidTime12HoursProvider")
	public void ValidTime12HoursTest(String time) {
	   boolean valid = time12HoursValidator.validate(time);
	   System.out.println("Time12Hours is valid : " + time + " , " + valid);
	   Assert.assertEquals(true, valid);
	}
	
	@Test(dataProvider = "InvalidTime12HoursProvider", 
                 dependsOnMethods="ValidTime12HoursTest")
	public void InValidTime12HoursTest(String time) {
	   boolean valid = time12HoursValidator.validate(time);
	   System.out.println("Time12Hours is valid : " + time + " , " + valid);
	   Assert.assertEquals(false, valid); 
	}	
}

单元测试–结果

Time12Hours is valid : 1:00am , true
Time12Hours is valid : 1:00 am , true
Time12Hours is valid : 1:00 AM , true
Time12Hours is valid : 1:00pm , true
Time12Hours is valid : 1:00 pm , true
Time12Hours is valid : 1:00 PM , true
Time12Hours is valid : 12:50 pm , true
Time12Hours is valid : 0:00 am , false
Time12Hours is valid : 10:00  am , false
Time12Hours is valid : 1:00 , false
Time12Hours is valid : 23:00 am , false
Time12Hours is valid : 1:61 pm , false
Time12Hours is valid : 13:00 pm , false
Time12Hours is valid : 001:50 pm , false
Time12Hours is valid : 10:99 am , false
Time12Hours is valid : 01:00 pm , false
Time12Hours is valid : 1:00 bm , false
PASSED: ValidTime12HoursTest("1:00am")
PASSED: ValidTime12HoursTest("1:00 am")
PASSED: ValidTime12HoursTest("1:00 AM")
PASSED: ValidTime12HoursTest("1:00pm")
PASSED: ValidTime12HoursTest("1:00 pm")
PASSED: ValidTime12HoursTest("1:00 PM")
PASSED: ValidTime12HoursTest("12:50 pm")
PASSED: InValidTime12HoursTest("0:00 am")
PASSED: InValidTime12HoursTest("10:00  am")
PASSED: InValidTime12HoursTest("1:00")
PASSED: InValidTime12HoursTest("23:00 am")
PASSED: InValidTime12HoursTest("1:61 pm")
PASSED: InValidTime12HoursTest("13:00 pm")
PASSED: InValidTime12HoursTest("001:50 pm")
PASSED: InValidTime12HoursTest("10:99 am")
PASSED: InValidTime12HoursTest("01:00 pm")
PASSED: InValidTime12HoursTest("1:00 bm")

===============================================
    com.mkyong.regex.Time12HoursValidatorTest
    Tests run: 17, Failures: 0, Skips: 0
===============================================

===============================================
mkyong
Total tests run: 17, Failures: 0, Skips: 0
===============================================

参考

http://en.wikipedia.org/wiki/12-hour_clock

想更多地了解正则表达式? 强烈推荐这本最好的经典书籍-“掌握正则表达式”



翻译自: https://mkyong.com/regular-expressions/how-to-validate-time-in-12-hours-format-with-regular-expression/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值