如何使用java验证完整的html

时间:2014-05-17 18:00:02

标签: java html validation

我想使用java验证HTML标签及其内容。验证应确保所有html标记都正确关闭。标签创建区域没有错误。例如

<div id="divIdvalue'></div>

<span id\="spanIdval" ,></span>

我需要验证这类事情。谷歌搜索时,我得到了一个像这样的正则表达式

<(\"[^\"]*\"|'[^']*'|[^'\">])*>

但它不会验证所有HTML是否已关闭?那么如何添加它呢。

我的示例代码附在下面。请帮帮我。

package com.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class htmlValidator {

    private static Pattern pattern;
    private static Matcher matcher;

    private static final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";

    public void HTMLTagValidator(){
        pattern = Pattern.compile(HTML_TAG_PATTERN);
    }

    public static boolean validate(final String tag){        
          matcher = pattern.matcher(tag);
          return matcher.matches(); 
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String htmlStr = "<div> <p id=/'bb'>This is first paragraph. This is first paragraph. </p> <span id='spanId'>Yes this is spab</span></div>";

        System.out.println("htmlStr :- "+htmlStr);

        validate(htmlStr);

    }

}

2 个答案:

答案 0 :(得分:1)

如果您确实需要使用纯Java解析HTML,则可以使用许多open source options。但是,我建议使用W3C来验证您的语法,因为根据定义它们将更正确地使用正确的用法。祝你的项目好运。

答案 1 :(得分:1)

<(\"[^\"]*\"|'[^']*'|[^'\">])*>

是单个标签,

<(\"[^\"]*\"|'[^']*'|[^'\">])*>(.*<(\"[^\"]*\"|'[^']*'|[^'\">])*>)?

用于一对标签或单个标签。

然而,复杂的案例不能通过单行正则表达式进行验证。