代码之家  ›  专栏  ›  技术社区  ›  Chris Barr

正则表达式不允许HTML标记[[副本]

  •  4
  • Chris Barr  · 技术社区  · 14 年前

    允许,但不能在它们之间有文本(但其他字符可以)。

    以下 允许:

    hello world
    !@$%^&*()_+'":;[]{}()\|#
    <<<<<<<
    >>>>>
    <>
    ><
    <087>
    <-->
    

    不会的 被允许

    <html>
    <a>
    <foo>
    <bar>
    

    我试过好几种表达方式,但都不走运。结果发现这比一开始看起来要困难得多(对我来说:P)

    编辑:基本上,除了: A-Z a-z 之间 < >

    2 回复  |  直到 14 年前
        1
  •  10
  •   Cameron Skinner    14 年前

    如果您这样做是为了防止网站上的HTML注入,那么更好的解决方案是在将HTML特殊字符发送到浏览器之前对其进行转义。大多数web开发环境/库都有一个标准函数来实现这一点,例如PHP htmlentities htmlspecialchars

        2
  •  2
  •   Antal Spector-Zabusky    14 年前

    令人震惊的是,既然您描述了您的用例,实际上听起来regexen将在这里工作:您需要防止 <SomeTextHere> 任何 限制在哪里,当然不需要担心递归。以下正则表达式的作用与您所希望的相反: <[A-Za-z]+> + * 如果你不允许 <> ). 这个 例如 , if (!/<[A-Za-z]+>/) { do_something() } ). 如果您在regex中需要它,并且您的语言支持这样的东西,您可以使用否定的前瞻断言: ^(?!.*<[A-Za-z]+>) . 上面写着“在字符串的开头匹配( ^ )如果我 查找( (?!...) )给定的文本,但匹配的字符串将不包含任何字符。