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»
+
+