不匹配任何 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
我真的很不擅长正则表达式,我想要的是一个不匹配任何 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