如何验证字符串是否仅包含某些字符

时间:2015-02-13 02:33:26

标签: c#

我正在为学校做作业:

我已将字符串传递给mutator,我需要验证它只包含空格,连字符或大写和小写字母。

输出总是" "

你能看出我做错了什么吗?有更聪明的方法吗?我从我的导师那里得到了这条路,但它不起作用。这是我的代码:

public void setFirstName(string newFirstName

{

    bool valid;

    valid = System.Text.RegularExpressions.Regex.IsMatch(newFirstName, "^[- a-zA-Z]?$");

    if (valid)

    {

        firstName = newFirstName;

    }

        firstName = " ";

}

2 个答案:

答案 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数组)是否与每个字符所提供的谓词匹配:

  • 必须是字母(大写或小写)或
  • 必须是破折号' - '或者
  • 必须是空格''

如果这些条件中的任何一个失败,那么结果将是错误的。