我正在为学校做作业:
我已将字符串传递给mutator,我需要验证它只包含空格,连字符或大写和小写字母。
输出总是" "
你能看出我做错了什么吗?有更聪明的方法吗?我从我的导师那里得到了这条路,但它不起作用。这是我的代码:
public void setFirstName(string newFirstName
{
bool valid;
valid = System.Text.RegularExpressions.Regex.IsMatch(newFirstName, "^[- a-zA-Z]?$");
if (valid)
{
firstName = newFirstName;
}
firstName = " ";
}
答案 0 :(得分:3)
你需要阻止。
public void setFirstName(string newFirstName)
{
bool valid;
valid = System.Text.RegularExpressions.Regex.IsMatch(newFirstName, "^[- a-zA-Z]*$");
if (valid)
{
firstName = newFirstName;
}
else
{
firstName = " ";
}
}
<强>更新强>
你的正则表达式似乎也错了它需要*为零或更多的出现而不是?
正确的正则表达式 =&gt; ^[- a-zA-Z]*$
点击此处查看工作小提琴=&gt; link
答案 1 :(得分:0)
作为RegEx的替代方案(如果您还在学习C#,我不建议使用),您可以使用LINQ和内置.Net char methods进行基本字符串验证。
bool isValid = newFirstName.All(x => char.IsLetter(x) || x == '-' || x == ' ');
在这种特殊情况下,All
将检查数组中的每个元素(字符串是否为char数组)是否与每个字符所提供的谓词匹配:
如果这些条件中的任何一个失败,那么结果将是错误的。