我有以下字符串:
var proc = new SAPayslips();
proc.RuleCustomValue = "document.xml|name@domain.com;name@domain.com;name@domain,co.za";
第一个值是xml文档的名称,其余的是我想要使用的电子邮件。
我可以成功拆分并使用它们,但我的验证有问题。如果电子邮件地址不包含@ char。
,我想抛出异常// retrieves document name
customValues = _ruleCustomValue.Split('|');
// retrieves emails
emails = customValues[1].Split(';');
if(!customValues[1].Contains("@"))
throw new System.InvalidOperationException("Invalid Email adress,");
当没有@
时,它不会抛出异常答案 0 :(得分:4)
您需要检查emails
以搜索电子邮件数组,而不是customValues[1]
这是一个字符串。如果只有一个customValues[1]
,true
上的来电包含将返回@
。
如果任何数组元素中没有包含@,则需要遍历find数组。
foreach (var email in emails)
if(!email.Contains("@"))
{
throw new System.InvalidOperationException("Invalid Email adress,");
}
您也可以使用Enumerable.Any
来使用linqif(emails.Any(email=>email.indexOf("@") == -1))
throw new System.InvalidOperationException("Invalid Email adress,");
答案 1 :(得分:2)
检查内部是否有“@”并不是确定它是电子邮件地址的确切解决方案,我认为您将需要正则表达式模式,
示例;
function isEmail(email) {
var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
return pattern.test(email);
};
检查并抛出异常;
if( !isEmail("e@example.com") ) { *here we go! throw exception!*}
这里有关于此的更多信息; link
我希望它会有所帮助。
答案 2 :(得分:0)
首先,它只会在一个位置抛出它(因为你只指定了一个位置:customValues[1]
)
其次,您指定的项目实际上是数组中的 second 项目,因为所有集合都从0
开始。
您可能想要做的是通过循环,并检查每个电子邮件字符串:
foreach (string s in customValues)
{
if (!s.Contains("@"))
// throw exception
else
// do stuff...
}
答案 3 :(得分:0)
您确认任何电子邮件都包含@,而不是每封电子邮件都包含@。
您应该收到每封电子邮件,并通过该电子邮件验证不是自定义值中的项目。
您可以尝试以下代码:
// retrieves document name
string[]customValues = _ruleCustomValue.Split('|');
// retrieves emails
string[] emails = customValues[1].Split(';');
foreach (string email in emails)
{
if (!email.Contains("@"))
{
throw new System.InvalidOperationException("Invalid Email adress,");
}
}
答案 4 :(得分:0)
试试这个
// retrieves document name
customValues = _ruleCustomValue.Split('|');
// retrieves emails
emails = customValues[1].Split(';');
foreach(var email in emails)
{
if (!EmailValidated(email))
{
throw new System.InvalidOperationException("Invalid Email adress,");
}
}
private static bool EmailValidated(string emailAddress)
{
const string pattern = @"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@"
+ @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])\."
+ @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
+ @"([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$";
var match = Regex.Match(emailAddress.Trim(), pattern, RegexOptions.IgnoreCase);
return match.Success;
}