不匹配任何 html 标记的正则表达式

Regex that does not match any html tag

我真的很不擅长正则表达式,我想要的是一个不匹配任何 html 标签(用于用户输入验证)的正则表达式。

我要的是否定的:

<[^>]+>

我目前拥有的是

public class MessageViewModel
{
    [Required]
    [RegularExpression(@"<[^>]+>", ErrorMessage = "No html tags allowed")]
    public string UserName { get; set; }
}

但它与我想要的相反 - 只允许带有 html 标签的用户名

正则表达式无法进行 "negative" 匹配。

但他们可以进行 "positive" 匹配,然后您可以将他们找到的所有内容都扔出字符串。


编辑 - 问题更新后,事情变得更清楚了。试试这个:

public class MessageViewModel
{
    [Required]
    [RegularExpression(@"^(?!.*<[^>]+>).*", ErrorMessage = "No html tags allowed")]
    public string UserName { get; set; }
}

解释:

^            # start of string
(?!          # negative look-ahead (a position not followed by...)
  .*         #   anything
  <[^>]+>    #   something that looks like an HTML tag
)            # end look-ahead
.*           # match the remainder of the string

这个问题有点老了,不过我最近遇到了同样的需求,差不多。

如果它有 space before/after 阻止 HTML 看到它有标签,我想允许“>”或“<”。

也许它并不完美,但它为我完成了工作:

^((?!(<\S)|(\S>)).)*$

您可以在这里进行测试:regex101.com