正規表現でHexカラーコードを検証する方法
16進カラーコード正規表現パターン
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
説明
^ #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
全体の組み合わせは、文字列が “#”記号で始まり、 “a”から “f”、 “A”から “Z”までの文字、または “0”から “9” 3長さ。この正規表現パターンは、16進数のWebカラーコードチェックに非常に役立ちます。
Javaの正規表現の例
package com.mkyong.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();
}
}
一致する16進コード:
{空} 1。 “#1f1f1F”、 “#AFAFAF”、 “#1AFFa1″、 “#222fff”、 “#F00″、 “#F00”
一致しない16進コード:
{空} 1。 “123456” – “#”記号で始める必要があります2. “#afafah” – “h”は許可されません “a”から “f”までの有効な文字3. “#123abce” – 長さ6または長さ3 “aFaE3f”は6桁または3桁の “#”記号で始める必要があります。 “F00” – 記号 “#”で始める必要があります。 “6桁”または “3桁” #F0h ” – ” h “は許可されません。” a “から” f “まで有効な文字です。
ユニットテスト – HexValidator
package com.mkyong.regex;
import org.testng.Assert;
import org.testng.annotations.** ;
/** **
** Hex validator Testing
** @author mkyong
**
** /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);
}
}
}
ユニットテスト – 結果
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.mkyong.regex.HexValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================
===============================================
mkyong
Total tests run: 2, Failures: 0, Skips: 0
===============================================
リファレンス
正規表現の詳細を知りたいですか?このベストと古典的な本を強くお勧めします – “正規表現をマスターする”
+
+