REGName for LastName,FirstName

时间:2016-01-28 22:14:43

标签: c# regex

如果我有一个LastName,FirstName,我有一个应该返回True的函数。

此名称返回False,但应返回True。有什么想法吗?我希望能够接受名称中的撇号,A-Z,a-z,下划线和0-9。我可能在逗号之前和之后都有空格。

此测试名称失败:" D' Antonio,Patricia"

代码是:

public static bool IsName(string input)
{
     if (string.IsNullOrEmpty(input)) return false;
     if (System.Text.RegularExpressions.Regex.Match(input, "^\\[A-Za-z0-9_']+\\s?,\\s?\\[A-Za-z0-9_']+").Success) return true;
     return false;
    }

3 个答案:

答案 0 :(得分:2)

您的"^\\[A-Za-z0-9_']+\\s?,\\s?\\[A-Za-z0-9_']+"在文字符号中看起来像^\[A-Za-z0-9_']+\s?,\s?\[A-Za-z0-9_']+,它匹配字符串的开头(^),后跟文字[和文字序列{ {1}}后跟一个或多个A-Za-z0-9_',一个或零个空格,一个逗号,一个或零个空格等。

您需要移除]之前的\\并在结尾处添加[

$

另一种写作方式 - 使用^[A-Za-z0-9_']+\s?,\s?[A-Za-z0-9_']+$ 代替\w [A-Za-z0-9_]修饰符,仅匹配ASCII字母和数字(ryanyuyu suggests ):

RegexOptions.ECMAScript

请注意,如果没有^[\w']+\s?,\s?[\w']+$ 修饰符,RegexOptions.ECMAScript会匹配.NET flavor中的\w - 所有Unicode字母和数字。

请参阅regex demo

[\p{L}\p{M}\p{N}_]是一个文字\\,它使正则表达式引擎将\视为文字[[是字符串结束锚,因此名称后不会出现任何内容。

C#(使用逐字字符串文字,它们使定义正则表达式更容易):

$

请参阅demo

@"^[A-Za-z0-9_']+\s?,\s?[A-Za-z0-9_']+$"

此外,如果有可能进入换行符,使用using System; using System.Text.RegularExpressions; using System.IO; public class Test { public static void Main() { Console.WriteLine(IsName("D'Antonio, Patricia")); } public static bool IsName(string input) { if (string.IsNullOrEmpty(input)) return false; if (Regex.IsMatch(input, @"^[A-Za-z0-9_']+\s?,\s?[A-Za-z0-9_']+")) return true; else return false; } } 水平空白Unicode类别类而不是\p{Zs}可能更安全。

进一步优化:

以前的表达式允许\s字符串。要禁止它们,请使用

','

或ASCII版本:

@"^(?:\p{L}+')?\w+\s?,\s?(?:\p{L}+')?\w+$"

答案 1 :(得分:1)

通过一些调试,以下正则表达式似乎可以工作;

if (Regex.IsMatch(input, @"^[A-Za-z0-9_']+s?, s?[A-Za-z0-9_']+$")) {
    return true;
}

答案 2 :(得分:0)

string pattern = @"(?x) ^ [\w ']+ , [\w ']+ $ ";

Regex r = new Regex(pattern);

Console.WriteLine(r.Match("D'Antonio, Patricia")); //D'Antonio, Patricia
Console.WriteLine(r.Match("D_Antonio, Patricia")); //D_Antonio, Patricia
Console.WriteLine(r.Match("D_Antonio, Patricia01")); //D_Antonio, Patricia01
Console.WriteLine(r.Match("D-Antonio, Patricia01")); //No Match
  • [\ w' \ d] +将匹配任何单词字符,连字符和任何单词 数字,一次或多次(+)。
  • ^和$将匹配整个字符串,而不是它的一部分。
  • (?x)是一个正则表达式选项,它将忽略模式中的空格。 \ w允许单词字符为空格,下划线和任何数字,在.Net。