C# 不匹配任何html标记的正则表达式
我对regexp非常不熟悉,我想要的是一个与任何html标记都不匹配的regexp(用于用户输入验证) 我想要的是否定的:C# 不匹配任何html标记的正则表达式,c#,regex,asp.net-mvc,unobtrusive-validation,C#,Regex,Asp.net Mvc,Unobtrusive Validation,我对regexp非常不熟悉,我想要的是一个与任何html标记都不匹配的regexp(用于用户输入验证) 我想要的是否定的: <[^>]+> ]+> 我现在拥有的是 public class MessageViewModel { [Required] [RegularExpression(@"<[^>]+>", ErrorMessage = "No html tags allowed")] public string UserName
<[^>]+>
]+>
我现在拥有的是
public class MessageViewModel
{
[Required]
[RegularExpression(@"<[^>]+>", ErrorMessage = "No html tags allowed")]
public string UserName { get; set; }
}
公共类MessageViewModel
{
[必需]
[RegularExpression(@“]+>”,ErrorMessage=“不允许使用html标记”)]
公共字符串用户名{get;set;}
}
但它与我想要的正好相反-只允许带有html标记的用户名正则表达式不能进行“负”匹配 但他们可以进行“积极”匹配,然后你可以把他们发现的一切都扔掉
编辑-问题更新后,事情变得更清楚了。试试这个:
public class MessageViewModel
{
[Required]
[RegularExpression(@"^(?!.*<[^>]+>).*", ErrorMessage = "No html tags allowed")]
public string UserName { get; set; }
}
公共类MessageViewModel
{
[必需]
[RegularExpression(@“^(?.%.*]+>).*,ErrorMessage=“不允许使用html标记”)]
公共字符串用户名{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
^#字符串的开头
(?!#消极前瞻(位置后面没有…)
有什么事吗
]+>#看起来像HTML标记的东西
)#结束展望未来
.*#匹配字符串的其余部分
这个问题有点老了,但我最近几乎遇到了同样的需求
我想允许“>”或“我在c#中使用[RegularExpression]属性,我想不允许用户按我的要求输入任何html标记,但找不到清晰的语法。正则表达式是迄今为止我遇到的最复杂的东西,而不是黑名单(如html标记),考虑一下白名单。这样更安全,也更容易维护。
[RegularExpression(@“^[\p{L}\p{N}]+$”,ErrorMessage=“仅限字母和数字。不允许空格)。]
请参阅以获取有关选择适当Unicode字符范围的帮助。的非Unicode版本。^[a-zA-Z0-9]+$“
。它似乎与内联s修饰符一起工作<代码>^(?s)(?!.]+>).@Wesley当然,这是另一种选择。NET正则表达式风格支持该修饰符,但并非所有修饰符都支持。鉴于已经有一个公认的答案(很久以前),您能否解释一下,在何种情况下,您的解决方案将是一个有趣的替代方案,以帮助用户做出选择。
^((?!(<\S)|(\S>)).)*$