拆分

时间:2015-08-06 06:10:39

标签: c# validation

我有以下字符串:

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,");

当没有@

时,它不会抛出异常

5 个答案:

答案 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

来使用linq
if(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;
}