gpt4 book ai didi

c# - 姓氏、名字的正则表达式

转载 作者:行者123 更新时间:2023-11-30 21:52:01 28 4
gpt4 key购买 nike

我有一个函数,如果我有姓氏和名字,它应该返回 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;
}

最佳答案

你的 "^\\[A-Za-z0-9_']+\\s?,\\s?\\[A-Za-z0-9_']+" 看起来像 ^\[A-Za-z0-9_']+\s?,\s?\[A-Za-z0-9_']+ 的字面量,它匹配字符串 (^) 后跟文字 [A-Za-z0-9_' 的文字序列后跟一个或多个 ],一个或零个空格,一个逗号,一个或零个空格等。

您需要删除[之前的\\,并在末尾添加$:

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

另一种写法 - 使用 \w 而不是 [A-Za-z0-9_] with RegexOptions.ECMAScript 修饰符 仅匹配 ASCII 字母和数字(如 ryanyuyu suggests ):

^[\w']+\s?,\s?[\w']+$

请注意,如果没有 RegexOptions.ECMAScript 修饰符,\w 匹配 [\p{L}\p{M}\p{N}_] .NET 风格 - 所有 Unicode 字母和数字。

参见 regex demo

\\ 是一个文字 \,它使正则表达式引擎将 [ 视为文字 [$是字符串结束 anchor ,所以名字后面不能出现任何内容。

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

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

参见 demo :

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;
}
}

此外,如果有可能输入换行符,使用 \p{Zs} 水平空白 Unicode 类别类可能比使用 \s 更安全。

进一步优化:

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

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

或 ASCII 版本:

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

关于c# - 姓氏、名字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35073162/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com