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

时间:2015-02-01 17:11:51

标签: c# regex asp.net-mvc unobtrusive-validation

我对正则表达式非常糟糕,我想要的是一个与任何html标签都不匹配的正则表达式(用于用户输入验证)。

我想要的是对此的否定:

<[^>]+>

我目前拥有的是

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

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

2 个答案:

答案 0 :(得分:5)

正则表达式不能做&#34;否定&#34;匹配。

但他们可以做到积极的&#34;匹配,然后你可以扔出他们找到的所有字符串。


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

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

答案 1 :(得分:0)

这个问题有点老了,但是我最近几乎遇到了同样的需求。

我想允许“>”或“ <”,如果它在防止HTML看到它具有标签之前/之后有一个空格。

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

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

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