C# 手机号和固定电话号码验证

using System.Text.RegularExpressions;

public class PhoneValidator
{
    /// 
    /// 验证中国大陆手机号(11位,以1开头)
    /// 支持最新号段:13/14/15/16/17/18/19
    /// 
    public static bool IsValidMobile(string phone)
    {
        // 正则表达式解析:
        // ^1          以1开头
        // [3-9]       第二位为3-9
        // \d{9}$      后续9位数字
        const string pattern = @"^1[3-9]\d{9}$";
        return Regex.IsMatch(phone, pattern);
    }

    /// 
    /// 验证固定电话号码(支持带区号、分机号)
    /// 示例:010-12345678 或 0535-1234567 或 01012345678 或 (010)12345678
    /// 
    public static bool IsValidLandline(string phone)
    {
        // 正则表达式解析:
        // (^$\d{3,4}$|\d{3,4}-?)  区号(3-4位数字),可带括号或短横线
        // \d{7,8}                   主号码(7-8位数字)
        // (-\d{1,6})?$              可选分机号(1-6位数字)
        const string pattern = @"^($\d{3,4}$|\d{3,4}-?)?\d{7,8}(-\d{1,6})?$";
        return Regex.IsMatch(phone, pattern);
    }

    /// 
    /// 综合验证(手机号或固定电话)
    /// 
    public static bool IsValidPhone(string phone)
    {
        // 移除所有空格(兼容带空格的输入)
        var cleanPhone = phone.Replace(" ", "");
        return IsValidMobile(cleanPhone) || IsValidLandline(cleanPhone);
    }

    // 示例用法
    public static void Test()
    {
        // 手机号验证测试
        Console.WriteLine(IsValidMobile("13812345678"));  // True
        Console.WriteLine(IsValidMobile("12345678901"));  // False(第二位错误)
        Console.WriteLine(IsValidMobile("1381234567a"));  // False(包含字母)

        // 固定电话验证测试
        Console.WriteLine(IsValidLandline("010-12345678"));     // True
        Console.WriteLine(IsValidLandline("05351234567"));      // True
        Console.WriteLine(IsValidLandline("(0755)12345678"));   // True
        Console.WriteLine(IsValidLandline("12345-678901"));     // False(区号错误)

        // 综合验证测试
        Console.WriteLine(IsValidPhone(" 138 1234 5678 "));     // True(带空格)
        Console.WriteLine(IsValidPhone("010-1234-5678"));       // True(带分机号)
    }
}

你可能感兴趣的:(c#,开发语言)