Comment valider le code de couleur Hex avec une expression régulière

Comment valider le code de couleur hexadécimal avec une expression régulière

Modèle d'expression régulière de code couleur hexadécimal

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

La description

^        #start of the line
 #       #  must constains a "#" symbols
 (       #  start of group #1
  [A-Fa-f0-9]{6} #    any strings in the list, with length of 6
  |      #    ..or
  [A-Fa-f0-9]{3} #    any strings in the list, with length of 3
 )       #  end of group #1
$        #end of the line

Toute combinaison signifie, la chaîne doit commencer par un symbole "#", suivi d'une lettre de "a" à "f", "A" à "Z" ou un chiffre de "0" à 9 "avec exactement 6 ou 3 longueur. Ce modèle d'expression régulière est très utile pour la vérification du code des couleurs Web hexadécimales.

Exemple d'expression régulière Java

package com.example.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HexValidator{

   private Pattern pattern;
   private Matcher matcher;

   private static final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";

   public HexValidator(){
      pattern = Pattern.compile(HEX_PATTERN);
   }

   /**
   * Validate hex with regular expression
   * @param hex hex for validation
   * @return true valid hex, false invalid hex
   */
   public boolean validate(final String hex){

      matcher = pattern.matcher(hex);
      return matcher.matches();

   }
}

Code hexadécimal correspondant:

1. "# 1f1f1F", "#AFAFAF", "# 1AFFa1", "# 222fff", "# F00", "# F00"

Code hexadécimal qui ne correspond pas:

1. «123456» - doit commencer par un symbole «” symbol
2. “#afafah” – “h” is not allow, valid letter from “a” to “f”
3. “#123abce” – either 6 length or 3 length
4. “aFaE3f” – must start with a “
», soit 6 longueur ou 3 longueur
5. “F00” – must start with a “#” symbol
6. “#afaf” – either 6 length or 3 length
7. “#F0h” – “h” is not allow, valid letter from “a” to “f”

Test unitaire - HexValidator

package com.example.regex;

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

/**
 * Hex validator Testing
 * @author example
 *
 */
public class HexValidatorTest {

    private HexValidator hexValidator;

    @BeforeClass
        public void initData(){
        hexValidator = new HexValidator();
        }

    @DataProvider
    public Object[][] ValidHexProvider() {
        return new Object[][]{
               {new String[] {
                "#1f1f1F", "#AFAFAF","#1AFFa1","#222fff", "#F00"
               }}
        };
    }

    @DataProvider
    public Object[][] InvalidHexProvider() {
        return new Object[][]{
            {new String[] {
                   "123456","#afafah","#123abce","aFaE3f",
                   "F00","#afaf", "#F0h"
                }}
        };
    }

    @Test(dataProvider = "ValidHexProvider")
    public void ValidHexTest(String[] hex) {

       for(String temp : hex){
           boolean valid = hexValidator.validate(temp);
           System.out.println("Hex is valid : " + temp + " , " + valid);
           Assert.assertEquals(true, valid);
       }

    }

    @Test(dataProvider = "InvalidHexProvider", dependsOnMethods="ValidHexTest")
    public void InValidHexTest(String[] hex) {

       for(String temp : hex){
           boolean valid = hexValidator.validate(temp);
           System.out.println("Hex is valid : " + temp + " , " + valid);
           Assert.assertEquals(false, valid);
       }

    }
}

Test unitaire - Résultat

Hex is valid : #1f1f1F , true
Hex is valid : #AFAFAF , true
Hex is valid : #1AFFa1 , true
Hex is valid : #222fff , true
Hex is valid : #F00 , true
Hex is valid : 123456 , false
Hex is valid : #afafah , false
Hex is valid : #123abce , false
Hex is valid : aFaE3f , false
Hex is valid : F00 , false
Hex is valid : #afaf , false
Hex is valid : #F0h , false
PASSED: ValidHexTest([Ljava.lang.String;@1a626f)
PASSED: InValidHexTest([Ljava.lang.String;@e5855a)

===============================================
    com.example.regex.HexValidatorTest
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
example
Total tests run: 2, 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»

+
+