正規表現で時間を12時間形式で検証する方法

正規表現を使用して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.example.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時」–時間は範囲外です[1-12]
2。 「10:00 am」– 1つの空白のみが許可されます
3。 「1:00」– amまたはpm
4で終了する必要があります。 「23:00 am」-24時間形式は許可されていません
5。 「1:61 pm」–分が範囲外です[0-59]
6。 「13:00 pm」–時間が範囲外です[1-12]
7。 「001:50pm」–無効な時間形式
8。 「午前10時99分」–分が範囲外です[0-59]
9。 「01:00 pm」– 24時間形式は許可されていません
10。 「1:00 bm」– amまたはpmで終わる必要があります

単体テスト-Time12HoursValidatorTest

package com.example.regex;

import org.testng.Assert;
import org.testng.annotations.*;

/**
 * Time 12 hours format validator Testing
 * @author example
 *
 */
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.example.regex.Time12HoursValidatorTest
    Tests run: 17, Failures: 0, Skips: 0
===============================================

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

参照

正規表現についてもっと知りたいですか? この最高の古典的な本を強くお勧めします–「正規表現の習得」

+
+