Java:使用正则表达式的String中的位数

时间:2017-03-09 00:11:41

标签: java regex string

我正在研究正则表达式并且想要知道如何检查字符串是否包含精确数量的字符内容,尽管它们可能被分割但是其他类型的字符。

这里我有检查字符串是否遵循这些参数的方法:

1)如果字符串以' +'开头,那么这个字符串必须有12个数字

2)如果字符串以'('或数字开头,那么字符串必须有10个数字

3)字符串可能包含0-2' - '不能一个接一个的字符例如:' - '

4)字符串可能包含1对括号&#39;(&#39;和&#39;)&#39;,但它位于左边的&#39; - &#39; < / p>

5)括号之间必须有3个数字

6)字符串

中不包含非数字字符

7)字符串以数字

结尾

这是方法本身:

public static boolean checkTelNumber(String number) {
        if (number.matches("\\d{12} | \\d{10}"))
            return number.matches("^\\+?(\\d*(\\(\\d{3}\\))?\\d*(\\-?\\d+\\-?)?\\d*)");
        else return false;
}

此方法正确检查所有内容,除非字符串中包含10/12个数字,否则删除if (number.matches("\\d{12} | \\d{10}"))部分内容。提前谢谢!

我的所有输出:

方法输出|结果编号|实际结果|我以前用过的号码

true - 1 true +380501234567
true - 2 true +38050123-45-67
true - 3 true +38050123-4567
true - 4 true +3805012345-67
true - 5 true +38(050)1234567
true - 6 true +38(050)123-45-67
true - 7 true +38(050)12345-67
true - 8 true +38(050)123-4567
true - 9 true +-313450531202
true - 10 true +38051202(345)7
true - 11 true +38051202(345)-7
false - 12 false +38050)1234567
false - 13 false +38050)123-45-67
false - 14 false +38050)123-4567
false - 15 false +38050)12345-67
false - 16 false +38(0501234567
false - 17 false +38(050123-45-67
false - 18 false +38(05012345-67
false - 19 false +38(050123-4567
true - 20 false +38(050)12-3456
true - 21 false +38(050)123456
true - 22 false +38(050)12345-6
true - 23 false +38(050)1-23456
false - 24 false +38)050(1234567
false - 25 false +38(050)1-23-45-6-7
false - 26 false +38-(050)1234567
false - 27 false +38((050)1234567
false - 28 false +5(0--5)1234567
false - 29 false +-313450531202))
false - 30 false +38051202(345)-7))
true - 1 true 050123-4567
true - 2 true 050123-45-67
true - 3 true 05012345-67
true - 4 true (999)1112222
true - 5 true (999)111-22-22
true - 6 true (999)111-2222
true - 7 true (999)11122-22
true - 8 true 1-23456789-0
true - 9 true (345)0512027
false - 10 false (345)0512027))
false - 11 false 1-23456789-0))
false - 12 false 7-4-4123689-5
false - 13 false 050ххх4567
true - 14 false 050123456
false - 15 false (0)501234567

1 个答案:

答案 0 :(得分:1)

有点测试不是为了假装的心脏!!
共生验证确保了比赛中的正确形式。

^(?=\+\D*(?:\d\D*){12}$|(?=[(\d])\D*(?:\d\D*){10}$)(?!.*--)(?!.*-.*\(.*\))(?=[+\d()]*-?[\d()]*-?[\d()]*$)\+?[-\d]*(?:\(\d{3}\))?[-\d]*\d$

解释

 ^                                          # BOS
 # ASSERTs - Validation
 (?=
      \+                                    # if +, 12 digits
      \D*                      
      (?: \d\D* ){12}
      $ 
   |                                        # or,
      (?= [(\d] )                           # if ( or \d, 10 digits
      \D* 
      (?: \d\D* ){10}
      $ 
 )
 (?! .* -- )                                # optional -, but not 2 in a row

 (?! .* - .* \( .* \) )                     # optional (ddd) but not after -

 (?= [+\d()]* -? [\d()]* -? [\d()]* $ )     # max 2 dashes

 # MATCH
 \+?                                        # optional +
 [-\d]* 
 (?: \( \d{3} \) )?                         # optional (ddd)

 [-\d]*                                     # dash or numbers

 \d                                         # ends with number
 $                                          # EOS