我对正则表达式非常糟糕,我想要的是一个与任何html标签都不匹配的正则表达式(用于用户输入验证)。
我想要的是对此的否定:
<[^>]+>
我目前拥有的是
public class MessageViewModel
{
[Required]
[RegularExpression(@"<[^>]+>", ErrorMessage = "No html tags allowed")]
public string UserName { get; set; }
}
但它与我想要的相反 - 只允许用户名使用html标签
答案 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