正则表达式用href验证空锚,而不是用名称空锚

时间:2014-07-02 08:02:54

标签: javascript jquery regex

之前我使用以下RegExp来验证具有HREF属性的锚点应该包含文本:

//regex for invalid anchor tag like: <a href="#"/> or <a href="#"> </a> 
var pattern = new RegExp('<a [^>]*(/>|>\\s*</a>)', 'g');

现在我有额外的验证要求,如果带有name属性的锚没有文本,它应该显示有效,如下面的例子所示:

<a href="www.google.com">the link</a> Don't Match
<a name="google"></a> Don't Match
<a href="www.google.com">&nbsp;</a> Match
<a href="www.google.com"></a> Match
<a name="google">the link</a> Match

我使用以下代码与正则表达式匹配:

function validateText(text, rteObj) {
    //regex for invalid anchor tag like: <a href="#"/> or <a href="#"> </a> 
    var pattern = new RegExp('<a [^>]*(/>|>\\s*</a>)', 'g');
    var textMatch = text.match(pattern);

    if (textMatch) {
        rteObj.findParentByType("tabpanel").activate(rteObj.findParentByType("panel"));
        rteObj.markInvalid("Please remove the invalid anchor tags from the text content");
        return false;
    }
    return true;
}

谢谢你, 问候。

1 个答案:

答案 0 :(得分:0)

我想,这就是你想要的:

<a.*(?=name=\"([^\"]*)\")[^>]*>([^$|\s+]*)<\/a>

Working example 1

它会捕获<a name="google"></a>(在您的情况下有效)但不会<a name="google">the link</a>

编辑1:

根据您的评论,以下正则表达式将执行反向逻辑:

<a.*(?=name=\"([^\"]*)\")[^>]*>([^<]+)<\/a>

Working example 2

编辑2:

根据您要求匹配<a href="#"> </a>的其他请求:

<a.*(?=href=\"([^\"]*)\")[^>]*>([^<]+)<\/a>

Working example 3

编辑3:

根据提问者评论,仅验证空值,例如<a href="#"> </a>但不验证<a href="#">The link</a>

<a.*(?=href=\"([^\"]*)\")[^>]*>([^\s+]+|[^\S+]+)<\/a>

Working Example 4

编辑4:

当提问者总是编辑问题时,这是最后的(最后一次)更新:

<a.*(?=href=\"([^\"]*)\")[^>]*>([^\s+]+|[^\S+]+|\w*)<\/a>|<a.*(?=name=\"([^\"]*)\")[^>]*>(\s*\S+.*)<\/a>

它将验证:

<a href="www.google.com">the link</a> Don't Match
<a name="google"></a> Don't Match
<a href="www.google.com">&nbsp;</a> Match
<a href="google.com"></a> Match
<a name="google">The link</a> Match

Working example 5