【发布时间】:2021-03-19 17:58:21
【问题描述】:
我正在开发一个表达式来验证所有可能的电话号码格式。我有 50%,它没有通过 * . - whitespace 验证我承认的字符
这些是规则
它可以包含左括号和右括号 ex。 (55)
它可以连续或不'+' char ex。 (+52)
它可以在括号内包含 2 或 3 个数字 ex。 (+555) o (+55)
它可以在右括号和下一个之间包含空格 数字前。 (55) 44332211
括号中的连续数字必须是 6 或 8 个数字,例如。 (55)443322 或 (55)44332211
括号中的连续数字可以包含空格, 破折号、星号或冒号。例如(55)44-33-22-11 o (55)44 33 22 11 o (55)44*33*22*11 o (55)44.33.22.11
括号中的连续数字可以分成几组 2、3 或 4 个数字,例如。 (55)5544-3322 o (55)55 44 33 22 o (555)444*333
数字格式可以是一行 8、10 或 12 个数字,例如。 55443322 o 5544332211 o 554433221100
这是正则表达式
[\(]?[\+]?(\d{2}|\d{3})[\)]?[\s]?((\d{6}|\d{8})|(\d{3}[\*\.\-\s]){3}|(\d{2}[\*\.\-\s]){4}|(\d{4}[\*\.\-\s]){2})|\d{8}|\d{10}|\d{12}
我做错了什么?我留下一个示例脚本,我正在为 Python 做的正则表达式,我不知道我是否用 JS 改变了很多
$(function(){
$('ul li').each(function(){
let number = $(this).text();
let regex = /^[\(]?[\+]?(\d{2}|\d{3})[\)]?[\s]?((\d{6}|\d{8})|(\d{3}[\*\.\-\s]){3}|(\d{2}[\*\.\-\s]){4}|(\d{4}[\*\.\-\s]){2})|\d{8}|\d{10}|\d{12}$/;
let res = regex.test( number );
$(this).text( $(this).text() + ' is: ' + res);
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Telephone numbers
<ul>
<li>test</li>
<li>(55)test</li>
<li>(55)333-test</li>
<li>(55)test 22</li>
<li>554433221100</li>
<li>5544332211</li>
<li>55443322</li>
<li>(55)443322</li>
<li>(55)44332211</li>
<li>(+55)443322</li>
<li>(+55)44332211</li>
<li>(55)4433*2211</li>
<li>(55)444.333</li>
<li>(55)44-33-22-11</li>
<li>(55)4433-2211</li>
<li>(+55)443 322</li>
</ul>
【问题讨论】:
-
这是否意味着你所有的测试用例都应该返回true?
-
只有在规则指定的情况下,por example (55)test 是不允许的,但是 55-44-33-22-11 是的(并且它不起作用:()
-
@AlbertoSiurob 你的规则有很多漏洞。是否允许
(55)123-4567、555-123-4567、55-1234-56、+55123456、551-234-567(其中55是国际代码)? -
这是一个例子,可以以(32)开头 55是我的区号
-
@AlbertoSiurob 是的,但是这些示例的结果应该是什么?另外,
5555*5555*5555、55 12-12-12和55 123-123呢?