手机号正则表达式验证_这样用好正则表达式,生活、工作都能事半功倍

edc5529b110920693b418b9ea1d9dd9e.png
作者:SanKo

正则表达式原本是计算机科学里的术语,后来引入到程序语言中,在工程上也广泛应用。不过,对于大部分读者来说,即使我们不写程序、不做计算机技术相关工作,依然可以在生活、工作中尝试使用正则表达式。许多时候,若是使用正则表达式来完成,往往可以事半功倍。

它让 VSCode 的「查找」「替换」如虎添翼

我们在日常生活或者工作中,总是会碰到需要「批量处理文本」的时候。昨天我朋友在烦恼工作上的一件小事情。她需要处理数百个手机号,每行一个,需要在每个手机号的前后分别加上一个双引号。

13100002222
13100003333
13100004444
13100005555
13312345678
13987654321

最终变成:

"13100002222"
"13100003333"
"13100004444"
"13100005555"
"13312345678"
"13987654321"

也许你会选择手动一行一行敲入引号 ",亦或会动用 Excel 中强大的公式。然而,使用 Visual Studio Code、Sublime Text 等支持正则表达式替换的文本编辑器,这完全是小菜一碟。

在 VSCode 中,首先使用 option+command+F(macOS) 或者 Ctrl+H (Windows)打开「查找替换」栏。在第一行「查找」框中输入 d+,在第二行「替换」框中输入 "$0",最后点击「替换全部」按钮(在「替换」框右侧的第二个按钮),所有操作就都完成了。

c44fc7dee74573ad728b3c8858ca09f0.png

在 Sublime Text 中也是同样的操作。

ec02d22edfaced9063dc2d82a9ac8aff.png

当然了,为了使用正则表达式的匹配模式,需要在 VSCode 和 Sublime Text 中查找时点亮「.*」的标记。这个按钮在 VSCode 查找框内的最右侧,在 Sublime Text 查找栏的左上角。

现在可以来稍微解释一下这里用到的两个表达式了。

在「查找」框中,我们填入的是 d+,意思是「一个或更多的数字」。正则表达式中,d 表示「数字」,而 + 表示「一个或更多」。

d94967e338b8596529f0560527eb3d3c.png

在「替换」框中,我们填入的是 "$0",很好理解,就是在前面查找出来的每一个结果两侧加上 " 双引号。这里,$0 可以用来「引用」整个匹配到的结果。

7c2997aaa9b6ddf4e05feee057696e83.png

当然了,替换时的 $ 符号还可以有 $1$2$3……

700bbe6e47513bf1c5659cdc9af191f5.png

还是刚才的那些手机号,现在换成了稍微复杂一些的规则。查找时,输入的规则是 (d{3})(d{4})(d{4}),替换时的规则是 $1-$2-$3。最后,我们得到了:

3f4ce8bbc415ef3a461c510123b0172c.png

在这个规则中,d{3} 意味着「3个数字」,d{4} 以为着「4个数字」。于是我通过 d{3}d{4}d{4} 这样一个规则,把号码分成了 3、4、4 的三段。对于匹配到的每一段,我都加上了一个括号。

9bbbd57e8b2634a96de8813c7184d72d.png

于是,当我们在「替换」中输入 $1 的时候,它会从「查找」框中寻找第一个括号,并使用匹配到的第一个括号里的内容来替换 $1 的部分。至于 $2$3,便是在查找时去匹配第二、第三个括号中的内容。

它让 Everything 的搜索比快更快

Everything 是 Windows 上一款颇受好评的文件搜索工具,在 Windows 上实现了文件「即时搜索」的效果。

然而,Everything 搜索文件虽然很快,但是遇到文件名记不清的情况,就只能输入几个关键词,在搜出的一大片文件列表中逐个确认,未免有些费时。

我曾经保存了一个图片,名字就叫 apple,但是却忘记了它的文件格式。到底是 jpg 还是 png?还是 gif 或者 bmp?也可能是 jpeg 或者 webp?

直接使用 Everything 的普通模式搜索时,会出现数百个结果。

f67dd9885a96c2443dab2483dfc06e14.png

使用快捷键 Ctrl+R 打开「正则表达式」的开关,就可以使用正则表达式来进行匹配了。打开后,在 Everything 右下角的状态栏中会出现「正则表达式」的文字。

42a2820bf50035649f8369df7cd743a2.png

这样一来,搜索结果就只剩下了 4 个,寻找起来比刚才省事很多。

我在这里使用的正则表达式也并不复杂。^apple..{3,}$ 中, ^$ 分别表示文件名的起始位置和结束位置,意味着在匹配到的结果前后都不再有其他字符。. 表明一个小数点 .,也就是文件名和扩展名之间间隔的那个点。后面的 .{3,} 意味着「3 个或更多的任意字符」,匹配了扩展名中可能存在的 3 个或更多字符。

1e407a0aa7bf64ceb981528e78104638.png

市面上也有一些其他文件搜索工具,使用了和 Everything 相似的技术原理,却鲜见对正则表达式的完备支持。然而,如果没有了正则表达式,这些文件搜索工具速度再快,也是没有灵魂的。

它让 Tasker 和快捷指令锦上添花

当你在你的 Android 手机上收到一条验证码,如何把它快速复制到你的剪贴板里呢?现在各大定制 OS 都提供了「复制验证码」的功能,但是仍需手动点击通知中的「复制」按钮。借助 Tasker 我们可以实现更加自动化的复制。

  1. 设置 PROFILE,当收到新短信时触发
  2. 检查短信中是否包含验证码
  3. 如果包含验证码,提取并复制到剪贴板
  4. 直接在对应的 APP 里面粘贴

对于其中的第二步「检查短信中是否包含验证码」,就又是正则表达式大展拳脚的地方了。

1fbc7785ca970c702861da1fa5182f3b.png

我这里使用了一个简单粗暴的方式来检查验证码内容:是否包含连续 4-8 个数字。正则表达式用的是 d{4,8},也就是从短信中寻找连续的 4-8 个数字,并放到剪贴板中。

iOS 上的「快捷指令」同样可以使用正则表达式进行匹配和替换。比如下图中的这个快捷指令,可以在分享知乎链接的时候,只复制最精简的的回答链接。

433f55a9e608a08d9ab5a98e8efdd6c4.png

如果直接复制,你得到的可能是这样一大段文字:

三体中,歌者为什么那么轻易就使用二向箔? — 王东凯陪你考注会 的回答 - 知乎 https://www.zhihu.com/question/304759872/answer/1079833112?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=26915779903488

而借助这个快捷指令,你可以直接获得下面的链接:

https://www.zhihu.com/question/304759872/answer/1079833112

用于匹配的正则表达式是这样的:

https://www.zhihu.com/question/d+/answer/d+

它可以寻找到符合格式要求的网址,并通过后续的动作复制到剪贴板中。

总之,无论是在 Windows 和 macOS 上处理文本,还是在 Everything 中搜索文件,亦或是在手机和平板电脑上进行自动化的操作,如果一个工具可以支持正则表达式,如果你能够善用正则表达式,那它一定会给你带来许多新的可能性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值