如何使用正则表达式验证HTML标签

本文介绍如何使用Java正则表达式来验证HTML标签。内容包括符合要求的HTML标记示例,如`<b>`、`<input value='>'>`等,以及不匹配的标记情况,如包含双引号或单引号的错误用法。同时,还提到了单元测试`HTMLTagValidatorTest`及其结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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标记,以“”标记开头,其中不包含单引号或双引号。 最后,以结束标记“>”结尾

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>”,“ <输入值='>'>”
2。“ <输入值='<'>”,“ <b />”
3.“ <a href='http://www.google.com'>”
4.“ <br>”,“ <br/>”
5.“ <输入值= \” \” id ='测试'>”,“ <输入值=” id ='测试'>”

HTML标记不匹配:

1.“ <输入值= \” id =“测试”>” –不允许使用双引号字符串
2.“ <输入值='id ='测试'>” –不允许使用单引号字符串
3.“ <输入值=>>” –不允许单引号>,必须用单引号或双引号引起来

单元测试– 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
===============================================

想更多地了解正则表达式? 强烈推荐这本最好的经典书籍-“掌握正则表达式”



翻译自: https://mkyong.com/regular-expressions/how-to-validate-html-tag-with-regular-expression/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值