c# - 使用正则表达式的 Asp.Net 模型验证。寻找特定的字符串而不仅仅是一个字母

标签 c# regex asp.net-mvc model-view-controller model

我目前的情况是,我们不想让外部电子邮件用于我们的一个应用程序。该应用程序是在 Asp.Net MVC 中开发的。我知道在模型端你可以做服务器端验证,然后你可以用它来获得前端验证。我的问题是我使用的 RegularExpression 总是返回 true,就好像它只是在寻找这些字母之一而不是整个字符串。如何让它查找整个字符串?

这是一个示例代码片段和结果。

[Required]
[EmailAddress]
[Display(Name = "Email")]
//I have tried many different variations on the regex
[RegularExpression("{/@gmail}", ErrorMessage = "No Gmail accounts allowed")]
//[RegularExpression("{[/@gmail]}", ErrorMessage = "No Gmail accounts allowed")]
//[RegularExpression("{[/@][g][m][a][i][l]}", ErrorMessage = "No Gmail accounts allowed")]
//[RegularExpression("/@gmail", ErrorMessage = "No Gmail accounts allowed")]

public string Email {get; set;}

无论我在正则表达式上尝试什么变体,这似乎都是结果。 我还通读了所有规则,但没有看到任何匹配字符串的内容。 Result

非常难过...... 在 perl 中,它会像“s/@gmail//g”一样简单,没有什么可以从模型端完成的类似操作吗?

@彼得B

[RegularExpression("@gmail", ErrorMessage = "Please do not use your gmail account.")]

Result using the gmail format

最佳答案

根据您最初的理解,答案是使用:

[RegularExpression("@gmail", ErrorMessage = "No Gmail accounts allowed")]

但是,此验证规则实际上声明电子邮件必须包含“@gmail”,而不是不得包含。

然后,解决方案是使用 negative lookahead否定模式 - 类似于:

[RegularExpression("^(?!.*@gmail)", ErrorMessage = "No Gmail accounts allowed")]

这是说“从字符串的开头向前看,它不能包含模式:"@gmail"”。

关于c# - 使用正则表达式的 Asp.Net 模型验证。寻找特定的字符串而不仅仅是一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466438/

相关文章:

c# - FindControl 和动态创建的控件出现问题

java - 如何通过匹配已知的关键字集来提取子字符串

php - 在分号上拆分 php 中的 sql 语句(但不在引号内)

.net - ASP.NET MVC - 操作 HTTP Post

asp.net - 部署在 IIS 6 上的 MVC3 RC 应用程序出现 "403 forbidden"错误

C# 动态扩展一个对象

c# - 在 C# 中,为什么单个转换可以同时执行拆箱和枚举转换?

asp.net-mvc - 在 IdentityServer 中获取 FacebookAuthenticationProvider 实例(Owin 应用程序)

c# - 任何人都可以向我解释如何使用 Func<T, T, bool> 吗? validateValue = null) Xamarin 社区工具包 ObservableObject 中的验证?

java - 正则表达式 - 禁止某些字符连续出现