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}$");