【发布时间】:2015-02-27 11:03:32
【问题描述】:
因此,作为我正在编写的 xsd 架构的一部分,我正在添加接受字符串内容的元素,但我想要做的是阻止用户输入 HTML 标签之类的内容。所以我认为最好的方法是添加一个限制性模式,所以我想传入一个正则表达式,它会阻止用户传入 HTML 标签,但我的正则表达式知识很差,实际上它非常差。
到目前为止我有这个
<xsd:element name="item" minOccurs="0" maxOccurs="42" type="type:extraInfoType" >
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:complexType name="extraInfoType">
<xsd:simpleContent>
<xsd:restriction base="xsd:string">
<xsd:pattern value="" /> // So I want a regular expression here.
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
所以我的问题是阻止用户输入 HTML 标签的正则表达式是什么?
我见过类似<(img|a)[^>]*>(?<content>[^<]*)< 的东西,但从我对正则表达式的最低理解来看,这仅用于检查<img> 和<a> 标记。我想检查所有标签。
我还认为我可以只做[a-zA-Z0-9] 这样可以使元素只接受字符和数字而不接受特殊字符吗?如果我想接受某些特殊字符,例如"、'、@、,、.、&、(、)、£ 和 @987654,该怎么办?
【问题讨论】:
-
你想要的很难正确实现。所以你可以使用类似
<[/!]?\S+[\s\S]*?>的东西,但如果它搞砸了也不要感到惊讶:) -
@HamZa 这个正则表达式到底能为我做什么?我的正则表达式知识令人震惊,所以我实际上不确定这会做什么。
-
其实看看
<[\/!]?\S[\s\S]*?>这个表达式。这是online demo,您可以在其中测试并阅读说明。 -
如果您使用从answer 到previous question 的任一XSD 1.0 解决方案,您不必检查标签,因为属性值已经不能包含标签.
-
但是,您可能仍希望在接口级别sanitize your input 在向 XML 添加用户输入。可以在 here 找到一些 JavaScript 想法。