Comment valider la balise HTML avec une expression régulière
Modèle d'expression régulière de balise HTML
<("[^"]*"|'[^']*'|[^'">])*>
La description
< #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 ">"
Balise HTML, commencez par une balise d'ouverture «sans guillemets simples ou doubles. Enfin, terminez par une balise de fermeture ">"
Exemple d'expression régulière Java
package com.example.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();
}
}
Balise HTML qui correspondent:
1. «», « ’>»
2. “" - balise d'ouverture simple> n'est pas autorisé, doit être entouré de guillemets simples ou doubles
Test unitaire - HTMLTagValidatorTest
package com.example.regex;
import org.testng.Assert;
import org.testng.annotations.*;
/**
* HTMLTag validator Testing
* @author example
*
*/
public class HTMLTagValidatorTest {
private HTMLTagValidator htmlTagValidator;
@BeforeClass
public void initData(){
htmlTagValidator = new HTMLTagValidator();
}
@DataProvider
public Object[][] ValidHTMLTagProvider() {
return new Object[][]{
new Object[] {""},
new Object[] {""},
new Object[] {""},
new Object[] {""},
new Object[] {""},
new Object[] {"
"},
new Object[] {"
"},
new Object[] {""},
new Object[] {""}
};
}
@DataProvider
public Object[][] InvalidHTMLTagProvider() {
return new Object[][]{
new Object[] {""},
new Object[] {""},
new Object[] {" >"}
};
}
@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);
}
}
Test unitaire - Résultat
HTMLTag is valid : , true HTMLTag is valid : , true HTMLTag is valid : , true HTMLTag is valid : , true HTMLTag is valid : , true HTMLTag is valid :
, true HTMLTag is valid :
, true HTMLTag is valid : , true HTMLTag is valid : , true HTMLTag is valid : ") PASSED: ValidHTMLTagTest("") PASSED: ValidHTMLTagTest("") PASSED: ValidHTMLTagTest("") PASSED: ValidHTMLTagTest("") PASSED: ValidHTMLTagTest("
") PASSED: ValidHTMLTagTest("
") PASSED: ValidHTMLTagTest("") PASSED: ValidHTMLTagTest("") PASSED: InValidHTMLTagTest("") PASSED: InValidHTMLTagTest(" >") =============================================== com.example.regex.HTMLTagValidatorTest Tests run: 12, Failures: 0, Skips: 0 =============================================== =============================================== example Total tests run: 12, Failures: 0, Skips: 0 ===============================================
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»
+
+