问题描述
我需要你的帮助!我需要一个符合以下电话号码格式(德国、奥地利、瑞士)的正则表达式。我不知道如何创建这个正则表达式。
我需要的是电话号码格式如下:
+49 (089) 1234567890
+43 (01) 1234567890
+41 (051) 1234567890
只有提到的国家代码(+49、+43、+41)可以这样填写(包括加号)。否 0049 或 (0049) 或 (+49) 等
随后的空格字符应位于国家代码和区号之间。不允许使用其他字符,如 -、/、+ 等或字母。只有空格字符。
以下区号必须有括号。
随后的空格字符也应位于区号和电话号码之间。不允许使用其他字符,如 -、/、+ 等或字母。只有空格字符。
电话号码应完整填写(只能填写数字,数字之间不能有空格)。
我希望有人能支持我和我的请求,因为我真的不知道如何创建这种表达方式。我试过了,这就是结果:
[0-9]*\/*(\+49)*(\+43)*(\+41)*[ ]*(\([0-9]{3,6}\))*([ ]*[0-9]|\/|\(|\)|\-|)*
我想,这是完全错误的。
最好的问候, 克劳斯
解决方法
这应该适用于德国、奥地利和瑞士。前三个有效,其余无效测试:
const regex = /^\+4[139] \(0\d+\) \d{9,}$/;
[ '+49 (089) 1234567890','+43 (01) 1234567890','+41 (051) 1234567890','+41 (0) 1234567890','+41 (12) 1234567890','+41 (051) 12','+41 (051)','+41 051 1234567890','+41-051-1234567890','+44 (051) 1234567890',].forEach(str => {
console.log(str + ' ==> ' + regex.test(str));
});
输出:
+49 (089) 1234567890 ==> true
+43 (01) 1234567890 ==> true
+41 (051) 1234567890 ==> true
+41 (0) 1234567890 ==> false
+41 (12) 1234567890 ==> false
+41 (051) 12 ==> false
+41 (051) ==> false
+41 051 1234567890 ==> false
+41-051-1234567890 ==> false
+44 (051) 1234567890 ==> false
说明:
-
^
- 字符串开头的锚点(之前禁止任何内容) -
\+
- 文字“+” -
4[139]
-41
、43
或49
-
-
\(0\d+\)
- 以0
开头且至少有两位数字,括在括号中的数字 -
-
\d{9,}
- 至少 9 位的数字(您可以同时限制两者,例如\d{9,12}
是 9 到 12 位的数字) -
$
- 字符串末尾的锚点(不允许后面有任何内容)