使用Javascript的正则表达式非常严格的规则

时间:2013-01-12 10:16:39

标签: javascript regex

基本上我有类似的东西:

<script>
    function myfunction(){
        var data = CKEDITOR.instances.editable.getData();
        alert(data);
    }
</script>

我想要做的是,如果数据与此不匹配:

<h2>Any text allowed here but only text<h2> 

我想警告用户。 我怎样才能做到这一点? 谢谢..

我会编辑我的问题,我想这还不够清楚......

从某处读取数据变量。这不重要。 单击按钮时,将调用此函数。 数据变量(字符串)只能是这样的:

<h2> ANY TEXT HERE </h2>

所以不允许这样做:

Anytext
<h1>any text</h1>
<a href=..>

谢谢。

2 个答案:

答案 0 :(得分:2)

版本1:

var pattern = /<h2>[^\d]+<\/h2>/;
console.log(pattern.test('<h2>asf</h2>'));

这会阻止任何数字,但只接受普通字母。

第2版:

var pattern = /<h2>[A-Za-z]+<\/h2>/;
    console.log(pattern.test('<h2>asf</h2>'));

仅在标签之间接受A-Za-z

第3版:

   var pattern = /<h2>[^\<\>\/\d]+<\/h2>/;
    console.log(pattern.test('<h2>asf?1.,</h2>'));

这将接受除数字以外的任何内容并阻止任何结束标记

答案 1 :(得分:2)

使用浏览器的HTML解析功能而不是RegEx。只需将指定的字符串设置为某个元素的.innerHTML,然后使用DOM函数检查子项:

var temp = document.createElement("div");
temp.innerHTML = "<h2>Any text allowed here but only text</h2>";
if (
    temp.childNodes.length == 1 &&            // has only one child
    temp.firstChild.tagName == "H2" &&        // that child is a H2
    temp.firstChild.childNodes.length == 1 && // H2 as only one child
    temp.firstChild.firstChild.nodeType == 3  // that child a Node.TEXT_NODE
) {
    alert("valid");
} else {
    alert("invalid");
}