2015-12-14 93 views
-1

我使用RegularExpression attribute验证我的视图模型中一个输入上的多个电子邮件地址。 ErrorMessage不断出现在现场。我已经在5个不同的在线测试网站上验证了我的RegEx,并且他们都测试了正面。C#正则表达式属性不按预期方式工作

这里是我的代码:

[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;\s]+\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*){0,7}", ErrorMessage = "Please enter a valid email address. For multiple addresses please use a comma or semicolon to separate the email addresses.")] 
public string EmailAddresses { get; set; } 

如果我进入它的工作原理,如果我输入两个电子邮件地址,没有它的工作空间的电子邮件地址,但如果我添加一个空格它打破。我添加了'\ s'来包含空格,它在我尝试过的在线测试人员上工作,但在我的应用程序中不起作用。

预期有效的结果应该是: '[email protected][email protected][email protected]'

然而,这是回来为无效。如果我使用完全相同的序列并且没有空格,那么它是有效的。

Kendo UI在发送给控制器之前检查表单的验证。

任何帮助非常感谢。先谢谢你。

+0

'\ s'还允许换行符,垂直制表符,换页符以及其他几个符号。你确定你想要那些包含在你可以接受的比赛吗? –

+0

它怎么“打破?”给我们一些例子输入和输出与你的期望。它是逻辑正则表达式还是一些代码? – ps2goat

+0

@ ps2goat,这里有一些例子.... [email protected],[email protected]; [email protected](这是无效的) test @ test.com,test2 @ test.com; [email protected](这是有效的) –

回答

0

尝试这种模式:

"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"

+0

同样的问题。当我添加空格时,正则表达式失败。 –

+0

它很奇怪,因为这个模式测试了空格和电子邮件的所有可能的变体。您是否想要在页面上的一个文本字段中放置多个电子邮件? – Andrew

+0

正确,我允许他们将多个电子邮件地址放在一个由逗号或分号分隔的文本字段中。虽然我知道还有其他选择,但这是产品所有者想要的并且不会屈服的选项。 –

0

你并不需要 “@” 符号。我在http://regexstorm.net/tester测试了您的模式,并且它与[email protected][email protected][email protected]正确匹配。使用下面的构造

public class LoginViewModel 
{ 
    [RegularExpression("\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;\s]+\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*){0,7}", ErrorMessage = "Please enter a valid email address. For multiple addresses please use a comma or semicolon to separate the email addresses.")] 
    public string EmailAddresses { get; set; } 

} 

对于它在ASP.NET MVC框架的工作确保你的有关于它来验证idname属性是必需的观点

<input type="text" id ="EmailAddresses" name="EmailAddresses"/> 

以下。您可以像上面那样手动执行此操作,或者使用@Html.EditorFor(model => model.EmailAddresses)这将为您创建idname属性

+0

“@”符号与什么有什么关系? –

+0

@zespri,我说他不需要@符号。这不是原因。如果你阅读答案,我说“为了在ASP.NET MVC框架中工作,确保你在视图上进行以下操作......”并提供视图中所需的内容。 “@”符号用于告诉编译器保持字符串原样。这个属性不是必需的,因为编译器不会转义任何东西,并且会按原样使用。在这种情况下@不是必需的。 –

0

我发现问题。最后它与C#无关。问题是我在前端使用Kendo UI,在主帖中更新。基诺UI还必须接收由Andrew发送的RegEx更新以解决该问题。当他的RegEx为我工作时,我会让Andrew成为正确的解决方案。由于我是新手,因此服务器端/客户端方面的差异彻底改变了。感谢大家的帮助。

相关问题