之前我使用以下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"> </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;
}
谢谢你, 问候。
答案 0 :(得分:0)
我想,这就是你想要的:
<a.*(?=name=\"([^\"]*)\")[^>]*>([^$|\s+]*)<\/a>
它会捕获<a name="google"></a>
(在您的情况下有效)但不会<a name="google">the link</a>
。
根据您的评论,以下正则表达式将执行反向逻辑:
<a.*(?=name=\"([^\"]*)\")[^>]*>([^<]+)<\/a>
根据您要求匹配<a href="#"> </a>
的其他请求:
<a.*(?=href=\"([^\"]*)\")[^>]*>([^<]+)<\/a>
根据提问者评论,仅验证空值,例如<a href="#"> </a>
但不验证<a href="#">The link</a>
:
<a.*(?=href=\"([^\"]*)\")[^>]*>([^\s+]+|[^\S+]+)<\/a>
当提问者总是编辑问题时,这是最后的(最后一次)更新:
<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"> </a> Match
<a href="google.com"></a> Match
<a name="google">The link</a> Match