Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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/4/jsp/3.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# 如何屏蔽/强制仅使用名字和姓氏字母的大小写_C#_String_Input_Error Handling - Fatal编程技术网

C# 如何屏蔽/强制仅使用名字和姓氏字母的大小写

C# 如何屏蔽/强制仅使用名字和姓氏字母的大小写,c#,string,input,error-handling,C#,String,Input,Error Handling,我想提示用户提供他/她的名称。但是他的名字应该只包含字母而没有数字。它还允许在他的名字和中间名之间留一个空格,如“Walter junior”。 我知道如何使用char.isleter循环输入,也知道如何使用==null检查输入;但是中间的空格是个问题。您可以尝试使用正则表达式,例如 如果字母仅为英文字母(即A..Z A..Z): 借助正则表达式,您可以实现更详细的验证,例如 每个名称部分必须以大写字母开头 每个名称部分可以包含小写字母 名称最多可以有3个由空格分隔的部分 模式: bool

我想提示用户提供他/她的
名称
。但是他的名字应该只包含字母而没有数字。它还允许在他的名字和中间名之间留一个空格,如
“Walter junior”
。 我知道如何使用
char.isleter循环输入,也知道如何使用==null检查输入;但是中间的空格是个问题。

您可以尝试使用正则表达式,例如

如果字母仅为英文字母(即
A..Z A..Z
):

借助正则表达式,您可以实现更详细的验证,例如

  • 每个名称部分必须以大写字母开头
  • 每个名称部分可以包含小写字母
  • 名称最多可以有3个由空格分隔的部分
  • 模式:

      bool isValid = Regex.IsMatch(name, @"^\p{Lu}\p{Ll}*(?: \p{Lu}\p{Ll}*){0,2}$");
    

    这怎么会是个问题?你试过什么,什么不起作用?这可能也是开始研究正则表达式(使用
    Regex
    类)的好时机,以根据模式测试字符串,而不是遍历每个字符。但是没有模式。我的名字和你的不一样!我不知道用户的输入是否有1、2或3个部分,我也不知道他将使用哪种语言。我认为正则表达式只适用于固定的东西,比如电话号码,它只有1种格式。“模式”是你定义的任何东西。无论您试图实现何种逻辑来确定某人的姓名是否有效。(旁注:你根本不应该这样做。一个人的名字就是他们说的任何东西。读一下:)这很公平,但我仍然想定义一些限制。我的限制是:只允许使用英文字符,中间允许有空格,没有数字,没有标点符号,当然,也没有空字符。你能用正则表达式写一段代码来定义这些吗?如果我错了,请纠正我。@对于语法本身,[A-Za-z]是第一部分允许的字符。什么是“^”?什么是“?:”?什么是“+”?什么是“*$”?哦有很多事情我不知道,你做得太棒了,OP应该是RegEx。嗯
    ^
    $
    是锚定,字符串的开始和结束,所以
    ^…$
    意味着整个字符串应该匹配模式
    +
    *
    {0,2}
    是量词,表示“1次或多次”、“0次或多次”和“从0到2次”
    (?:)
    是一个分组,其中
    ?:
    的意思是“不要将其计入组[…]”
      bool isValid = Regex.IsMatch(name, @"^[A-Za-z]+(?: [A-Za-z]+)*$");
    
      bool isValid = Regex.IsMatch(name, @"^\p{Lu}\p{Ll}*(?: \p{Lu}\p{Ll}*){0,2}$");