我有一个电话号码,我希望数字07是常数,然后剩下的应该是正则表达式?
我看起来像这样:/^\07(?([0-9]{1})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/
。
示例编号:0752 8182 12
答案 0 :(得分:3)
我建议修改你的模式
/^07\(?([0-9])\)?[-. ]?([0-9]{4})[-. ]?([0-9]{3})$/
请参阅regex demo
您在第一个\
之前错过了(
,而\07
的反斜杠使得正则表达式引擎将07
部分解析为八进制值。
模式详情:
^
- 字符串开头07
- 07
\(?
- 可选的(
(注意,如果您不想允许{{1}等值,则需要将其与\)?
一起删除}})07(5) 4444 333
- 如果您不需要获取捕获的子文本,则可以删除([0-9])
和(
数字。)
- 可选的\)?
)
- 可选的[-. ]?
,-
或空格.
- 4位数(关于括号的相同注释)([0-9]{4})
- 同上[-. ]?
- 3位数(关于括号的相同注释)([0-9]{3})
- 字符串结束。答案 1 :(得分:1)
我清理了你的正则表达式,你不需要加上那些额外的括号,除非你正在对群组做些什么:
/^07\(?[0-9]\)?[-. ]?[0-9]{4}[-. ]?[0-9]{3}$/
会匹配这些数字
071 1111 111
077.1151.111
071-3211-121
0711111111
07(1) 1111 111
答案 2 :(得分:1)
您没有提供有效和无效数字的示例,我猜是基于您的正则表达式。试试这个:
var numbers = [
"0701234123",
"070 1234 123",
"070-1234-123",
"070.1234.123",
"07(0)1234-123",
"07(0) 1234-123",
"0070 1234 123",
"070 123 1234"
];
//var pattern = /^07\(?([0-9]{1})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
var pattern = /^07\(?\d\)?[-. ]?\d{4}[-. ]?\d{3}$/;
// /d = [0-9]
var matched = numbers.map(function (number) {
var matches = number.match( pattern );
if (matches) {
console.log(number + " valid");
} else {
console.log(number + " invalid");
}
});
输出是:
0701234123 valid
070 1234 123 valid
070-1234-123 valid
070.1234.123 valid
07(0)1234-123 valid
07(0) 1234-123 valid
0070 1234 123 invalid
070 123 1234 invalid