在C#中验证字符串

3

嗨,我正在尝试验证我的字符串,以便不允许任何以“911”开头的输入。因此,如果您键入:“9 11”,“91 1”,“9 1 1”,它应该通过我的if语句。 它可以使用“911”,但不适用于其他情况。以下是我的代码:

using System;
using System.Collections.Generic;

namespace Phone_List
{
    class Program
    {
        static void Main(string[] args)
        {
            var phoneList = new List<string>();
            string input;
            Console.WriteLine("Input: ");

            while ((input = Console.ReadLine()) != "")
            {
                phoneList.Add(input);

                for (int i = 0; i < phoneList.Count; i++)
                {
                    if (phoneList[i].Substring(0, 3) == "911")
                    {
                        input.StartsWith("9 11");
                        input.StartsWith("9 1 1");
                        input.StartsWith("91 1");
                        Console.WriteLine("NO");
                        Console.ReadLine();
                        return;
                    }

                    else
                    {
                        Console.WriteLine("YES");
                        Console.ReadLine();
                        return;
                    }
                }
            }
        }
    }
}

您可以看到,我正在尝试使用"input.StartsWith("9 11")",但它不起作用...


那段代码并没有太多意义,你正在条件块内编写“StartsWith”检查,而它已经以“911”开头且没有其他内容。此外,你必须检查“StartsWith”是否返回“true”,现在,你的检查什么也没做。 - Ray
1
谷歌“正则表达式”。它们是为了验证具有类似规则的字符串而设计的结构。 - t3dodson
使用正则表达式。这里以所有以911开头的字符串为例,其正则表达式为"911.*"。当匹配成功时,您就知道当前输入是以911开头的。 - Rahul Jha
你可以尝试在验证之前使用input.Replace(' ', '');来去除空格。 - Kien Chu
逐步执行代码,您会看到至少一个问题。(另一个问题是您正在调用StartsWith并丢弃结果。) - Raymond Chen
4个回答

2
您可以使用StringReplace方法;您所描述的条件可以表述如下。
input.Replace(" ", "").StartsWith("911")

我尝试在我的if语句之前编写了这段代码,但它仍然无法正常工作,我是不是漏掉了什么? - Cleon

1

使用正则表达式进行此类检查。

例如:

Regex.IsMatch(input, "^\\s*9\\s*1\\s*1");

这个正则表达式匹配所有在“911”前面和中间包含空格的字符串。

我写这段代码时遇到了一个“无法识别的转义序列”错误。 - Cleon
@Cleon 抱歉,忘记转义反斜杠了。通常转义序列是这样写的\s,但\在字符串中是一个特殊字符,所以你必须对其进行转义。这将导致\\s。更新后的答案现在是正确的。 - Domysee

0

使用以下代码检查字符串是否以"911"开头:

首先从输入字符串中创建一个没有任何空格的副本:

string input_without_white_spaces =
    new string(input.ToCharArray().Where(x => !char.IsWhiteSpace(x)).ToArray());

然后您可以像这样检查字符串是否以911开头:

if (input_without_white_spaces.StartsWith("911"))
{
    ...
}

0
bool valid = s.StartsWith("911") || 
            !string.Join("",s.Split()).StartsWith("911");

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