Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#检查输入是否为A<;整数>;_C# - Fatal编程技术网

C#检查输入是否为A<;整数>;

C#检查输入是否为A<;整数>;,c#,C#,可能的投入: 1) ASDF-123-ZXCV-456 2) YUIO-123-BNNM-987 3) QWER-123-LKJH-111 4) A1234 5) A456 我需要找到与Axxx(整数)模式匹配的输入,在本例中,应该返回4)或5) 我尝试了startWith(“A”),但1)仍然返回,因为它也以A开头,但我不希望这样 提前感谢@aleks andreev的评论,您可以尝试: bool IsLetterAThenNumericPattern(string candidate

可能的投入:

1) ASDF-123-ZXCV-456

2) YUIO-123-BNNM-987

3) QWER-123-LKJH-111

4) A1234

5) A456

我需要找到与Axxx(整数)模式匹配的输入,在本例中,应该返回4)或5)

我尝试了startWith(“A”),但1)仍然返回,因为它也以A开头,但我不希望这样


提前感谢@aleks andreev的评论,您可以尝试:

    bool IsLetterAThenNumericPattern(string candidate)
    {
        return System.Text.RegularExpressions.Regex.IsMatch(candidate, @"^A\d+$");
    }
对于以下情况,这将返回
true

  • A1
  • A123
  • A1234567890101
在以下情况下为假:

  • B1
  • A
  • A12345A
  • A123-456
正则表达式分解如下:

  • ^
    从字符串开头开始
  • A
    仅匹配字母A
  • \d+
    匹配一个或多个数字
  • $
    字符串的结尾

总之,只有当字符串以字母A开头,然后后跟>=1个数字时,此正则表达式才会返回true,其他情况除外。

因为它是一种简单的模式,所以您也可以使用Linq或
uint.TryParse

var inputs = new List<string>(){
    "ASDF-123-ZXCV-456",
    "YUIO-123-BNNM-987",
    "QWER-123-LKJH-111",
    "A1234",
    "A456",
    "A-456",
    "A 456",
    "A",
    "A1",
    ""
};
foreach(var input in inputs){
    //Linq
    bool isMatch = input.Length>0 && input[0]=='A' && input.Skip(1).All(x=>char.IsDigit(x));
    //tryparse
    bool isMatch2 = input.Length>0 && input[0]=='A' && uint.TryParse(input.Substring(1),NumberStyles.None,CultureInfo.InvariantCulture,out _);   
}
var输入=新列表(){
“ASDF-123-ZXCV-456”,
“YUIO-123-BNNM-987”,
“QWER-123-LKJH-111”,
“A1234”,
“A456”,
“A-456”,
“A 456”,
“A”,
“A1”,
""
};
foreach(输入中的var输入){
//林克
bool isMatch=input.Length>0&&input[0]='A'&&input.Skip(1).All(x=>char.IsDigit(x));
//锥虫
bool isMatch2=input.Length>0&&input[0]='A'&&uint.TryParse(input.Substring(1),NumberStyles.None,CultureInfo.InvariantCulture,out);
}
如果您希望字母“A”后面至少有一位数字,您可以在两种方法中为
input.Length>1
替换
input.Length>0


在我的测试中,Linq更快,其次是uint.TryParse,然后是Regex。其他答案提供了更简洁的方法,但最好了解您自己将如何实现这一点。以下是您尝试使用
.StartsWith(“A”)

static void Main(string[] args)
{
    string[] inputs = new string[] {
        null,
        string.Empty,
        "A",
        "ASDF-123-ZXCV-456",
        "YUIO-123-BNNM-987",
        "QWER-123-LKJH-111",
        "A1234",
        "A456",
        "A789Z",
        "A000",
        "B000"
    };
    const int longestInputLength = 17;

    foreach (string input in inputs)
    {
        bool result = IsNonNegativeIntegerWithPrefix(input);

        Console.WriteLine($"{input,longestInputLength}: {result}");
    }
}

static bool IsNonNegativeIntegerWithPrefix(string text)
{
    const string prefix = "A";

    if (text == null)
    {
        // Alternative: throw new ArgumentNullException(nameof(text));
        return false;
    }

    // There must be at least one additional character beyond the prefix
    if (text.Length < prefix.Length + 1)
        return false;

    // The string must start with the prefix
    if (!text.StartsWith(prefix))
        return false;

    // Every character after the prefix must be a digit
    for (int index = prefix.Length; index < text.Length; index++)
        if (!char.IsDigit(text[index]))
            return false;

    return true;
}

请注意,上面的代码使用任意长度的前缀,而不仅仅是单个字符。我本来会将
prefix
作为一个方法参数,但我不想在该参数为
null
或为空时进行处理,以分散对基本逻辑的注意力。

那么
A1B
呢?应该匹配吗?使用正则表达式。类似于
^A\d+$
No A1B的内容不应返回。A后面的字符应仅为整数。您能否澄清模式的整数部分是否是必需的?仅仅
“A”
是有效输入吗?允许负整数吗?太棒了!谢谢你,你忘了添加一个链接:)另外,如果你给regex添加一些解释,那就太棒了。例如:
^
表示字符串的开头,依此类推。感谢@AleksAndreev-根据您的反馈进行编辑。Mjames已经写出了答案。因此,再写一遍没有意义:对于输入
“A”
,您的LINQ方法错误地计算为
true
,因为
.Skip(1)。对于空序列,All(…)
返回
true
。您的
TryParse
方法对输入
“A-1”
的计算结果错误地为
true
,因为它接受负整数。@关于Linq aproach OP的培根没有说后面没有数字,但如果这是一个问题,我可以调整。关于tryparse,我同意,将更正。问题的标题和主体表示他们希望匹配
'A'
,后跟一个整数,因此在我看来,整数部分是必需的,尽管他们的测试用例都没有涵盖这一部分。
                 : False
                 : False
                A: False
ASDF-123-ZXCV-456: False
YUIO-123-BNNM-987: False
QWER-123-LKJH-111: False
            A1234: True
             A456: True
            A789Z: False
             A000: True
             B000: False