首页 > 解决方案 > 瑞士/奥地利/德国电话号码格式

问题描述

我需要你的帮助!我需要一个匹配以下电话号码格式(德国、奥地利、瑞士)的正则表达式。我不知道如何创建这个正则表达式。

我需要的是电话号码格式如下:

+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]|\/|\(|\)|\-|)*

我想,这是完全错误的。

最好的问候,克劳斯

标签: regexvalidationpattern-matching

解决方案


这应该适用于德国、奥地利和瑞士。前三个是有效的,其余的对测试无效:

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]- a 41, 43, 或49
  • - 空间
  • \(0\d+\)0- 一个以至少两位数字开头的数字,括在括号中
  • - 空间
  • \d{9,}- 一个至少有 9 位数字的数字(您可以同时限制两者,例如\d{9,12}一个 9 到 12 位数字的数字)
  • $- 在字符串末尾锚定(之后不允许任何内容)

推荐阅读