首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式匹配电话号码?

正则表达式匹配电话号码?
EN

Stack Overflow用户
提问于 2009-11-15 05:28:19
回答 5查看 5.7K关注 0票数 2

我想匹配一个可以有字母和可选连字符的电话号码:

  • 这是有效的:333-WELL
  • 这也是有效的:4URGENT

换句话说,最多可以有一个连字符,但是如果没有连字符,最多可以有7个0-9或A字符。

我不知道如何在regex中做和"if语句“。这可能吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-15 05:29:46

您寻找用管道字符表示的替换运算符:|

但是,您可能需要7个选项(每个连字符位置1个+无连字符1个),或者您可能需要在第3和第4个字符之间使用连字符,并使用2个选项。

交替运算符的一种使用定义了两个备选方案,如:

代码语言:javascript
运行
复制
({3,3}[0-9A-Za-z]-{4,4}[0-9A-Za-z]|{7,7}[0-9A-Za-z])
票数 4
EN

Stack Overflow用户

发布于 2009-11-15 05:36:47

我认为这应该可以做到:

代码语言:javascript
运行
复制
/^[a-zA-Z0-9]{3}-?[a-zA-Z0-9]{4}$/

它匹配3个字母或数字,后面是一个可选的连字符,后面是4个字母或数字。这个在红宝石里工作。根据您正在使用的regex引擎,您可能需要稍微修改它。

票数 5
EN

Stack Overflow用户

发布于 2009-11-15 05:41:48

不知道这算不算,但我会把它分解成两个正则表达式:

代码语言:javascript
运行
复制
#!/usr/bin/perl

use strict;
use warnings;

my $text = '333-URGE';

print "Format OK\n" if $text =~ m/^[\dA-Z]{1,6}-?[\dA-Z]{1,6}$/;
print "Length OK\n" if $text =~ m/^(?:[\dA-Z]{7}|[\dA-Z-]{8})$/;

这应该避免接受多个破折号,在错误的地方破折号等.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1736686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档