正则表达式未按预期进行评估

时间:2014-03-11 19:28:54

标签: c# regex c#-4.0

我正在尝试评估以下代码,但它并未返回预期的内容。 使用字符串" CityName !!!"进行测试返回true而不是false。我的表达式应该只允许一个字母和空格的字符串,任何长度,以字母开头。

protected bool isValidCityName(string cityName)
    {
        Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+");

        return cityMatch.IsMatch(cityName);
    }

谢谢

2 个答案:

答案 0 :(得分:2)

您的模式只是检查字符串是否以该模式开始。您需要包含一个结束锚($)以确保匹配后没有尾随字符:

Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+$");

此外,您可能需要考虑使用IgnoreCase选项:

Regex cityMatch = new Regex(@"^[a-z][a-z\s]+$", RegexOptions.IgnoreCase);

如果您的应用程序需要支持其他语言/区域设置(例如魁北克省),请使用Unicode categories

Regex cityMatch = new Regex(@"^\p{L}[\p{L}\s]+$");

答案 1 :(得分:1)

尝试在结尾添加$

Regex cityMatch = new Regex(@"^[a-zA-Z][a-zA-Z\s]+$");

Example

现在,您的表达式只需要字符串字符开头。 ^表示字符串的开头,+表示一个或多个$表示字符串的结尾

这几乎与任何正则表达式解析器相同。