在C#中,我如何判断账户的第一个字符是否为特定值?

3

我有一个包含15位帐号的字符串。第一位数字不能是0、1、8或9。 我想表达的意思是:

public bool ValidateAccountNumber(string Accountnumber )
{
    char[] Invalidboro = new char[] { '0', '1', '8', '9'};
    bool returnValue = true;

    if (Accountnumber.Length != 15 || Accountnumber.Substring(1, 1).Contains(Invalidboro))
    {
        returnValue = false;
    }
    return returnValue;
}

我是C#新手,不太确定如何做这个。


1
string Invalidboro = "0189"; Invalidboro.Contains(Accountnumber[0]); 无效区号 = "0189"; 无效区号.Contains(账户号码[0]); - Holger
1
其他注意事项:Substring(1, 1)将获取第二个字符,因为索引从0开始。此外,不需要returnValue。您可以简单地使用return false;return true;。您甚至可以使用return Accountnumber.Length != 15 || Invalidboro.Contains(Accountnumber[0]);完全省略if语句。 - 001
4个回答

6

正则表达式

public bool ValidateAccountNumber(string Accountnumber)
{
    return Accountnumber != null && Regex.IsMatch(Accountnumber, "^[2-7][0-9]{14}$");
}

4

您只需要使用&&将所有必需的检查组合起来。

using System.Linq;

...

// static: we don't want this in the method
public static bool ValidateAccountNumber(string Accountnumber) {
  return // Not null 
         Accountnumber != null &&
         // Contains exactly 15 characters 
         Accountnumber.Length == 15 &&
         // All characters are digits
         Accountnumber.All(c => c >= '0' && c <= '9') &&
         // Doesn't start from 0, 1, 8, 9 
       !(new char [] {'0', '1', '8', '9'}.Any(c => c == Accountnumber[0]));
}

2
我建议您以以下方式进行:
public bool ValidateAccountNumber(string accountNumber)
{
    var invalidBoro = new [] { '0', '1', '8', '9'};

    if (accountNumber != null && accountNumber.Length == 15)
    {
        return !invalidBoro.Contains(accountNumber[0]);
    }

    return false;
}

你是对的,最好在if语句中添加它。 - Evgeniy Ishutin

1

它检查关于AccountNumber的四个条件:

  • 它不应该是null
  • 它应该恰好有15个字符
  • 它不应该以0189开头
  • 所有字符都应该是数字

public static bool ValidateAccountNumber(string Accountnumber )
{
    var Invalidboro = new[] { '0', '1', '8', '9'};

    return Accountnumber != null &&
           Accountnumber.Length == 15 &&
           !Invalidboro.Contains(Accountnumber[0]) &&
           Accountnumber.All(c => c >= '0' && c <= '9');
}

仅澄清!Invalidboro.Contains(Accountnumber [0])部分:

  • Invalidboro是无效起始字符的数组。
  • 我们正在检查它是否包含Accountnumber的第一个字符([0]是数组的第一个元素,而stringchar的数组)。
  • 如果它包含,则无效。但是该方法应该在有效数字上返回true,因此我们使用对其取反。换句话说,这意味着:如果它不以某些无效字符开头,则它是有效的。

1
添加 Accountnumber.All(c => c >= '0' && c <= '9') 条件 - 所有字符都是数字 - Dmitry Bychenko
1
ValidateAccountNumber can be declared as static - Dmitry Bychenko
1
我认为你的意思是 char.IsDigit(),因为 char 没有 IsDigit 属性,而你当前的版本无法编译。这也是错误的,因为存在其他文化中的数字。https://dotnetfiddle.net/YxjWfr - Toshi
1
谢谢提供这些信息!现在我确定编程中没有什么真正简单的东西!=D - Anderson Pimentel
1
不想挑剔,但这就是重要的漏洞开始的方式:p 就像那个网店软件,如果客户订购了负数商品,就会给他们信用额度... - Toshi
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接