【正则表达式】Java手机号/座机号码校验(可匹配带区号、空格短横线分割的手机号与座机号)

一、正则表达式语法

正则表达式是一种强大的文本模式匹配工具,常用于文本搜索、替换、验证等任务。以下是一些正则表达式的常用语法和案例示例:

  1. 匹配字符

    • .:匹配任意字符,除了换行符。
      • 示例:a.b 匹配 “axb”、“a1b”,但不匹配 “a\nb”。
    • [abc]:匹配字符集中的任意一个字符。
      • 示例:[aeiou] 匹配任何一个元音字母。
    • [^abc]:匹配字符集之外的任意字符。
      • 示例:[^0-9] 匹配除数字之外的任意字符。
  2. 匹配重复次数

    • *:匹配前一个元素零次或多次。
      • 示例:a* 匹配 “a”、“aa”、“aaa”。
    • +:匹配前一个元素一次或多次。
      • 示例:a+ 匹配 “a”、“aa”,但不匹配 “aaa”。
    • ?:匹配前一个元素零次或一次。
      • 示例:colou?r 匹配 “color” 和 “colour”。
    • {n}:匹配前一个元素恰好 n 次。
      • 示例:a{3} 匹配 “aaa”,但不匹配 “aa” 或 “aaaa”。
    • {n, m}:匹配前一个元素至少 n 次,最多 m 次。
      • 示例:a{2,4} 匹配 “aa”、“aaa”、“aaaa”,但不匹配 “a” 或 “aaaaa”。
  3. 特殊字符转义

    • \:用于转义特殊字符。
      • 示例:\\ 匹配 “”。
  4. 锚点

    • ^:匹配字符串的开头。
      • 示例:^start 匹配以 “start” 开头的字符串。
    • $:匹配字符串的结尾。
      • 示例:end$ 匹配以 “end” 结尾的字符串。
  5. 字符类别

    • \d:匹配任何一个数字字符。
      • 示例:\d{3} 匹配三个连续的数字。
    • \w:匹配任何一个字母、数字或下划线字符。
      • 示例:\w+ 匹配一个或多个字母、数字或下划线。
    • \s:匹配任何一个空白字符(空格、制表符、换行符等)。
      • 示例:Hello\sWorld 匹配 “Hello World”。
  6. 分组和捕获

    • ():用于创建捕获组。
      • 示例:(\d{2})-(\d{2})-(\d{4}) 匹配日期格式 “dd-mm-yyyy”,每个组捕获日、月和年。
    • \1, \2, …:引用捕获组。
      • 示例:(\w+)\s+\1 匹配重复的单词,如 “hello hello”。
  7. 选择

    • |:用于在多个模式之间选择一个。
      • 示例:apple|orange 匹配 “apple” 或 “orange”。
  8. 边界

    • \b:匹配单词边界。
      • 示例:\bword\b 匹配 “word”,但不匹配 “wording” 或 “sword”。

二、校验手机号

    public boolean phoneValidate(String phoneNumber){
        if (phoneNumber != null && !phoneNumber.isEmpty()){
            boolean matches = Pattern.matches(
                    "^1[3-9]\\d{9}$|" +
                            "^1[3-9]\\d{1}[-\\s]\\d{4}[-\\s]\\d{4}$|" +
                            "^\\(1[3-9]\\d{1}\\)\\d{4}-\\d{4}$|" +
                            "^(?:\\(\\+\\d{2}\\)|\\+\\d{2})(\\d{11})$|" +
                            "^0\\d{3}-\\d{7}$|" +
                            "^0\\d{2}-\\d{8}$", phoneNumber);

            return matches;
        }
        return false;
    }

这个代码是一个用于校验手机号的正则表达式验证函数,它可以匹配多种不同格式的手机号。下面是该正则表达式的解释:

"^1[3-9]\\d{9}$|"               
// 匹配以1开头的11位数字手机号格式如:13185217412 

"^1[3-9]\\d{1}[-\\s]\\d{4}[-\\s]\\d{4}$|"   
// 匹配以1开头的带区号的手机号,格式如:131 8521 7412 或 131-8521-7412

"^\\(1[3-9]\\d{1}\\)\\d{4}-\\d{4}$|"     
// 匹配以1开头的带区号的手机号,格式如:(131) 8521-7412

"^(?:\\(\\+\\d{2}\\)|\\+\\d{2})(\\d{11})$|" 
// 匹配国际格式的手机号,如:(+86)13645678906 或 +8613645678906

"^0\\d{3}-\\d{7}$|"               
// 匹配以0开头的带四位区号的座机号,格式如:0755-1234567

"^0\\d{2}-\\d{8}$"                
// 匹配以0开头的带三位区号的座机号,格式如:010-12345678

这个正则表达式使用了多个正则模式,每个模式使用|分隔,表示多个模式中的任何一个匹配即可。这样,它可以用于校验多种手机号和座机号的格式,包括:

  1. 以1开头的11位数字手机号。
  2. 以1开头的带区号的手机号,可以是使用空格或短横线分隔的形式。
  3. 以1开头的带区号的手机号,区号使用圆括号括起来。
  4. 国际格式的手机号,以两位数的国际区号开头,后接11位数字手机号。
  5. 以0开头的带区号的座机号,格式如:四位区号-电话号码。
  6. 以0开头的带区号的座机号,格式如:三位区号-电话号码。

该函数返回一个布尔值,指示输入的phoneNumber是否匹配这些正则表达式中的任何一个。如果匹配,则返回true;否则,返回false。

这个正则表达式的目的是用于验证不同格式的电话号码,包括移动电话和座机号码。

三、正则表达式拼接

要将多个正则表达式拼接在一起,可以使用正则表达式的"或"操作符 |。这可以在多个表达式之间选择一个匹配。

假设有三个正则表达式,分别用于匹配日期、时间和日期时间:

  1. 日期正则表达式:\d{4}-\d{2}-\d{2}
  2. 时间正则表达式:\d{2}:\d{2}:\d{2}
  3. 日期时间正则表达式:\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}

如果想将它们拼接成一个正则表达式,以匹配日期、时间或日期时间,可以使用 | 操作符:

\d{4}-\d{2}-\d{2}|\d{2}:\d{2}:\d{2}|\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}

这个新的正则表达式将匹配任何一个满足日期、时间或日期时间格式的字符串。

需要注意的是,拼接多个正则表达式时,确保使用括号 () 将每个子表达式括起来,以便 | 操作符能够正确地应用。此外,还要注意正则表达式的优先级,以确保匹配的顺序符合预期。

你可能感兴趣的:(正则表达式,java,python)