我目前的情况是,我们不想让外部电子邮件用于我们的一个应用程序。该应用程序是在 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.")]
最佳答案
根据您最初的理解,答案会是使用:
[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/