Comment valider le format Time in 12 Hours avec une expression régulière

Comment valider l'heure au format 12 heures avec une expression régulière

Heure au format 12 heures Modèle d'expression régulière

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

La description

(               #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

Le format de l'horloge sur 12 heures commence de 0 à 12, puis un point-virgule (:) et suivi de 00 à 59, et se termine par am ou pm.

Exemple d'expression régulière 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();
      }
}

Format d'heure correspondant:

1. «1:00», «1:00», «1:00»,
2. «13h00», «13h00», «13h00»,
3. «12 h 50»

Le format de l'heure ne correspond pas:

1. «0:00 am» - l'heure est hors plage [1-12]
2. «10:00 am» - un seul espace blanc est autorisé
3. «1:00» - doit se terminer par am ou pm
4. Le format «23:00» -24 heures n'est pas autorisé
5. «1:61 pm» - la minute est hors plage [0-59]
6. «13:00 pm» - l'heure est hors plage [1-12]
7. «001: 50 pm» - format d'heure non valide
8. «10:99» - la minute est hors de portée [0-59]
9. «13 h 00» - Le format 24 heures n'est pas autorisé
10. «1:00 bm» - doit se terminer par am ou pm

Test unitaire - 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);
    }
}

Test unitaire - Résultat

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
===============================================

Référence

Vous voulez en savoir plus sur les expressions régulières? Je recommande vivement ce meilleur livre classique - «Maîtriser l'expression régulière»

+
+