正規表現でHTMLタグを検証する方法
HTMLタグ正規表現パターン
<("[^"]** "|'[^']** '|[^'">])** >
説明
< #start with opening tag "<" ( # start of group #1 "[^"]** " # allow string with double quotes enclosed - "string" | # ..or '[^']** ' # allow string with single quote enclosed - 'string' | # ..or [^'">] # cant contains one single quotes, double quotes and ">" ) # end of group #1 ** # 0 or more > #end with closing tag ">"
HTMLタグは、 “single”または “二重引用符”を囲まずに開始タグで始まります。最後に、終了タグ “>”で終了します。
Javaの正規表現の例
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLTagValidator{
private Pattern pattern;
private Matcher matcher;
private static final String HTML__TAG__PATTERN = "<(\"[^\"]** \"|'[^']** '|[^'\">])** >";
public HTMLTagValidator(){
pattern = Pattern.compile(HTML__TAG__PATTERN);
}
/** **
** Validate html tag with regular expression
** @param tag html tag for validation
** @return true valid html tag, false invalid html tag
** / public boolean validate(final String tag){
matcher = pattern.matcher(tag);
return matcher.matches();
}
}
一致するHTMLタグ:
{空} 1。 “<b>”、 “<input value = ‘>’>” <input value = ‘<‘> “、” <b/> “3. <a href = ‘http://www.google > <input value = “id =” test “>” <input value = “test”> ” ”
HTMLタグが一致しません:
{空} 1。 “<input value = ‘id =’ test ‘>” – 一重引用符文字列は許可されていません+ 3. ” <input value ⇒> ” – 単一開始タグ>は許可されていません。一重引用符または二重引用符で囲む必要があります
ユニットテスト – HTMLTagValidatorTest
package com.mkyong.regex;
import org.testng.Assert;
import org.testng.annotations.** ;
/** **
** HTMLTag validator Testing
** @author mkyong
**
** /public class HTMLTagValidatorTest {
private HTMLTagValidator htmlTagValidator;
@BeforeClass
public void initData(){
htmlTagValidator = new HTMLTagValidator();
}
@DataProvider
public Object[][]ValidHTMLTagProvider() {
return new Object[][]{
new Object[]{"<b>"},
new Object[]{"<input value='>'>"},
new Object[]{"<input value='<'>"},
new Object[]{"<b/>"},
new Object[]{"<a href='http://www.google.com'>"},
new Object[]{"<br>"},
new Object[]{"<br/>"},
new Object[]{"<input value=\"\" id='test'>"},
new Object[]{"<input value='' id='test'>"}
};
}
@DataProvider
public Object[][]InvalidHTMLTagProvider() {
return new Object[][]{
new Object[]{"<input value=\" id='test'>"},
new Object[]{"<input value=' id='test'>"},
new Object[]{"<input value=> >"}
};
}
@Test(dataProvider = "ValidHTMLTagProvider")
public void ValidHTMLTagTest(String tag) {
boolean valid = htmlTagValidator.validate(tag);
System.out.println("HTMLTag is valid : " + tag + " , " + valid);
Assert.assertEquals(true, valid);
}
@Test(dataProvider = "InvalidHTMLTagProvider",
dependsOnMethods="ValidHTMLTagTest")
public void InValidHTMLTagTest(String tag) {
boolean valid = htmlTagValidator.validate(tag);
System.out.println("HTMLTag is valid : " + tag + " , " + valid);
Assert.assertEquals(false, valid);
}
}
ユニットテスト – 結果
HTMLTag is valid : <b> , true
HTMLTag is valid : <input value='>'> , true
HTMLTag is valid : <input value='<'> , true
HTMLTag is valid : <b/> , true
HTMLTag is valid : <a href='http://www.google.com'> , true
HTMLTag is valid : <br> , true
HTMLTag is valid : <br/> , true
HTMLTag is valid : <input value="" id='test'> , true
HTMLTag is valid : <input value='' id='test'> , true
HTMLTag is valid : <input value=" id='test'> , false
HTMLTag is valid : <input value=' id='test'> , false
HTMLTag is valid : <input value=> > , false
PASSED: ValidHTMLTagTest("<b>")
PASSED: ValidHTMLTagTest("<input value='>'>")
PASSED: ValidHTMLTagTest("<input value='<'>")
PASSED: ValidHTMLTagTest("<b/>")
PASSED: ValidHTMLTagTest("<a href='http://www.google.com'>")
PASSED: ValidHTMLTagTest("<br>")
PASSED: ValidHTMLTagTest("<br/>")
PASSED: ValidHTMLTagTest("<input value="" id='test'>")
PASSED: ValidHTMLTagTest("<input value='' id='test'>")
PASSED: InValidHTMLTagTest("<input value=" id='test'>")
PASSED: InValidHTMLTagTest("<input value=' id='test'>")
PASSED: InValidHTMLTagTest("<input value=> >")
===============================================
com.mkyong.regex.HTMLTagValidatorTest
Tests run: 12, Failures: 0, Skips: 0
===============================================
===============================================
mkyong
Total tests run: 12, Failures: 0, Skips: 0
===============================================
正規表現の詳細を知りたいですか?このベストと古典的な本を強くお勧めします – “正規表現のマスター”
+
+