regex - RegEx 以匹配具有特定模式的电话号码
问题描述
我希望能够捕捉这些类型的电话格式
+xxx xxx xxx xxx
+xxx.xxx.xxx.xxx
+xxx xxxxxxxxx
+xxx-xxx-xxx-xxx
+xxxxxxxxxxxx
xxxx xxx xxx
xxxx xxxxxx
xxxx.xxx.xxx
xxxx-xxx-xxx
xxx-xxx-xxx
xxx.xxx.xxx
xxxxxxxxxx
xxxx xx xx xx
xxxx.xx.xx.xx
xxxx-xx-xx-xx
目前我有这个正则表达式
/^[+]?(\d{1,2})?[\s.-]?\(?\d{4}\)?[\s.-]?\d{3}[\s.-]?\d{3}$/
它捕获了一些示例,但不知道如何使其也适用于其他格式
解决方案
这些表达式对设计非常敏感,因为我们所有可能的输入都不在列表中。也许,更好的选择是只允许数字,或者首先删除所有非数字字符,然后处理/验证。
但是,如果我们只想根据此处列出的输入进行检查,我们也许可以找到一个表达式,可能类似于以下内容:
^[+]?(\d{3,4})[\s.-]?(\d{2,9})?([\s.-])?(\d{2,3})[\s.-]?(\d{2,3})$
演示
正则表达式
如果不需要此表达式,可以在regex101.com中对其进行修改或更改。
正则表达式电路
jex.im还有助于将表达式可视化。
JavaScript 演示
这个片段只是为了展示捕获组是如何工作的:
const regex = /^[+]?(\d{3,4})[\s.-]?(\d{2,9})?([\s.-])?(\d{2,3})[\s.-]?(\d{2,3})$/mg;
const str = `+777 777 777 777
+777.777.777.777
+777 777777777
+777-777-777-777
+777777777777
7777 777 777
7777 777777
7777.777.777
7777-777-777
777-777-777
777.777.777
7777777777
7777 77 77 77
7777.77.77.77
7777-77-77-77`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
推荐阅读
- java - 我可以使用 SendGrid 向多个用户发送电子邮件吗?
- go - 检查结构字段是否不为空
- c - 为什么 -5/2 的结果打印为 0?
- android - Android:未显示 Google Fit OAuth 同意屏幕
- azure - Azure 室内地图显示单位替代名称 (nameAlt)
- c - 计算c中输入字符串中单词的出现次数
- ruby-on-rails - Rails 路由:将自定义路由添加到标准操作列表
- flutter - 在 Flutter 中,如何将文件上传到 PubNub 频道?
- ios - 如何在 Swift 中用人类可读的日期替换字符串中的日期?
- python - 在 Raspi3 上安装 av lib 失败