用href验证空锚,而不是用name验证空锚的正则表达式

Regular Expression to validate empty anchor with href and not empty anchor with name

本文关键字:验证 name 正则表达式 href      更新时间:2023-09-26

早些时候,我使用以下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;
}

谢谢你,问候。

我想,这就是你想要的:

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

工作例1

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

编辑1:

根据您的评论,以下regex将执行反向逻辑:

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

工作例2

编辑2:

根据您的附加请求匹配<a href="#"> </a>:

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

工作例3

编辑3:

基于提问者的评论,只验证空值,例如<a href="#"> </a>而不验证<a href="#">The link</a>:

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

工作例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

工作例5