首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中使用正则表达式匹配规则

如何在C#中使用正则表达式匹配规则
EN

Stack Overflow用户
提问于 2013-07-23 17:18:01
回答 2查看 415关注 0票数 0

我对C#中的正则表达式是个新手。我不确定如何使用正则表达式来验证客户参考号。此客户参考编号有3种不同的类型: id、手机号和序列号。

C#:

代码语言:javascript
复制
string client = "ABC 1234567891233";

//do code stuff here:
if Regex matches 3-4 digits to client, return value = client id
else if Regex matches 8 digts to client, return value = ref no
else if Regex matches 13 digits to client, return value = phone no

我不知道如何使用正则表达式计算不同类型的位数。如Regex("{![\d.....}")。

EN

回答 2

Stack Overflow用户

发布于 2013-07-23 17:41:43

我不明白你为什么一定要在这里使用正则表达式。一个简单的一行就可以了,例如。即使是这样的扩展方法:

代码语言:javascript
复制
static int NumbersCount(this string str)
{
    return str.ToCharArray().Where(c => Char.IsNumber(c)).Count();
}

在我看来,它更清晰,更易于维护。

你可以尝试一下分组匹配和类似的东西:

代码语言:javascript
复制
"(?<client>[0-9]{5,9}?)|(?<serial>[0-9]{10}?)|(?<mobile>[0-9]{13,}?)"

然后,检查是否与"client“、"serial”、"mobile“匹配,并在此基础上解释字符串输入。但是它更容易理解吗?

对于那些以后阅读你的代码的人来说,它是否更清楚地表达了你的意图?

如果要求这些数字必须是连续的(正如@Corak指出的那样)……我仍然会迭代地编写它,如下所示:

代码语言:javascript
复制
/// <summary>
/// returns lengths of all the numeric sequences encountered in the string
/// </summary>        
static IEnumerable<int> Lengths(string str)
{
    var count = 0;
    for (var i = 0; i < str.Length; i++)
    {
        if (Char.IsNumber(str[i]))
        {
            count++;
        }
        if ((!Char.IsNumber(str[i]) || i == str.Length - 1) && count > 0)
        {
            yield return count;                
            count = 0;                    
        }
    }
}

然后你可以简单地:

代码语言:javascript
复制
bool IsClientID(string str)
{
    var lenghts = Lengths(str);
    return lenghts.Count() == 1 && lenghts.Single() == 5;            
}

它是不是更冗长?是的,但如果每次验证规则发生变化或需要进行一些调试时,人们仍然会更喜欢你,而不是让他们摆弄正则表达式:)这包括你未来的自己。

票数 3
EN

Stack Overflow用户

发布于 2013-07-23 17:26:44

我不确定我是否理解了你的问题。但是,如果您想从字符串中获取数字字符数,您可以使用以下代码:

代码语言:javascript
复制
Regex regex = new Regex(@"^[0-9]+$");
string ValidateString = regex.Replace(ValidateString, "");
if(ValidateString.Length > 4 && ValidateString.Length < 10)
    //this is a customer id
....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17806125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档