Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不匹配任何html标记的正则表达式_C#_Regex_Asp.net Mvc_Unobtrusive Validation - Fatal编程技术网

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

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

我对regexp非常不熟悉,我想要的是一个与任何html标记都不匹配的regexp(用于用户输入验证)

我想要的是否定的:

<[^>]+>
]+>
我现在拥有的是

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>)).)*$