regex - 瑞士/奥地利/德国电话号码格式
问题描述
我需要你的帮助!我需要一个匹配以下电话号码格式(德国、奥地利、瑞士)的正则表达式。我不知道如何创建这个正则表达式。
我需要的是电话号码格式如下:
+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]
- a41
,43
, 或49
\(0\d+\)
0
- 一个以至少两位数字开头的数字,括在括号中\d{9,}
- 一个至少有 9 位数字的数字(您可以同时限制两者,例如\d{9,12}
一个 9 到 12 位数字的数字)$
- 在字符串末尾锚定(之后不允许任何内容)
推荐阅读
- java - Java 11 无法解析方法,如果它是一个错误?
- javascript - 切换到子组件时如何隐藏父组件
- android - RNFetchBlob 无法正常下载(创建 0 B 文件)
- php - 以多步形式将数据重定向到正确阶段的问题
- html - Flexbox align-content spacebetween 不起作用
- ios - “CAShapeLayer”类型的值没有成员“leadingAnchor”
- r - 在ggplotly R中放置标签
- javascript - 在 Firebase 上托管 Nuxt.js SSR 应用时出现问题
- karate - karate DSL - 有没有办法在黄瓜报告中显示 PDF 文件?
- sparql - 列出来自 Wikidata 的属性的子属性