string letters validation
我对字符串和int.感到困惑,无法验证没有数字和奇怪字符的名称。A-Z和A-Z都很好。我理解"边做边循环"和"哨兵"的用法。我在这里看到了regex,但它在我的代码中不起作用,因为我不知道什么原因。我宁愿选择一个我能理解的简单解决方案。我在代码中验证了int,效果很好,但是验证名称会得到bool和int错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | static void Main(string[] args) { int age; double mileage; string strInput, name; bool isValid; DisplayApplicationInformation(); DisplayDivider("Start Program"); Console.WriteLine(); DisplayDivider("Get Name"); strInput = GetInput("your name"); name = strInput; Console.WriteLine("Your name is:" + name); Console.WriteLine(); do { DisplayDivider("Get Age"); strInput = GetInput("your age"); isValid = int.TryParse(strInput, out age); if (!isValid || (age <= 0)) { isValid = false; Console.WriteLine("'" + strInput +"' is not a valid age entry. Please retry..."); } }while (!isValid); Console.WriteLine("Your age is:" + age); //age = int.Parse(strInput); //Console.WriteLine("Your age is:" + age); Console.WriteLine(); do { DisplayDivider("Get Mileage"); strInput = GetInput("gas mileage"); isValid = double.TryParse(strInput, out mileage); if (!isValid || (mileage <= 0)) { isValid = false; Console.WriteLine("'" + strInput +"' is not a valid mileage entry. Please retry..."); } } while (!isValid); Console.WriteLine("Your age is:" + mileage); //mileage = double.Parse(strInput); //Console.WriteLine("Your car MPT is:" + mileage); TerminateApplication(); } |
尽管我建议您使用一个简单的regex,但您指出您需要一个不同的解决方案。
看看这个问题,第一个答案是regex解决方案,但第二个答案可能会回答您的问题:
1 | bool result = input.All(Char.IsLetter); |
正如Chris Lively所指出的,如果在名称中允许一个空格,那么可以使用以下命令进行验证:
1 | bool result = input.Replace("","").All(Char.IsLetter); |
坏小子@chris lively的建议更多的是你想要的一些易读的,而不是regex。
1 2 3 4 5 6 7 8 9 10 11 | bool result = strInput.Replace("","").All(Char.IsLetter); if you are wanting to do it the long way with a forloop then look at this example for (int i = 0; i < strinput.Length; i++) { //if this character isn't a letter and it isn't a Space then return false //because it means this isn't a valid alpha string if (!(char.IsLetter(strinput[i])) && (!(char.IsWhiteSpace(strinput[i])))) return false; } |
这是一款能满足你需求的雷杰克斯。
1 2 3 4 5 6 7 8 9 10 11 12 | Regex reg = new Regex("^[A-Za-z]+$"); do { DisplayDivider("Get Name"); strInput = GetInput("your Name"); isValid = reg.IsMatch(strInput); if (!isValid) { isValid = false; Console.WriteLine("'" + strInput +"' is not a valid name entry. Please retry..."); } } while (!isValid); |
基本上,它说,"匹配字符串的开始(^表示开始),只有字母直到字符串的结束($表示字符串的结束),并且必须有一个或多个字母(即+)"
可能是最简单的
现在,假设您不想要"firstname lastname",因为这意味着需要一个空间。如果需要分隔名称的空格,请通知我。