使用正则表达式验证手机号码

7

我需要验证手机号码。我的需求:

  1. 号码可能以+8801、8801或01开头
  2. 下一个数字可以是1、5、6、7、8或9
  3. 然后有确切的8位数字。

如何使用这些条件编写正则表达式?

我尝试过的手机号码:

+8801811419556
01811419556
8801711419556
01611419556
8801511419556

3
请更新您的问题,并附上您已尝试过的代码。 - Garfield
8位数的手机号码??? - Shurmajee
一个警告 - 对于经验丰富的程序员来说,正则表达式通常不是最容易阅读的东西。问问自己:如果标准发生了变化,你是否愿意进行进一步的更改? - Robbie Dee
@Shurmajee 实际上,这个数字有11位。所有的数字都以01开头。然后下一个数字因运营商而异。接下来的8位数字由运营商提供。 - Emdadul Sawon
7个回答

31

应该很简单:

^(?:\+?88)?01[15-9]\d{8}$
  • ^ - 字符串开头
  • (?:\+?88)? - 可选的 88,可以以 + 开始
  • 01 - 必须有 01
  • [15-9] - "1 或 5 或 6 或 7 或 8 或 9"
  • \d{8} - 8 个数字
  • $ - 字符串结尾

工作示例: http://rubular.com/r/BvnSXDOYF8

2020 年更新

由于 BTRC 批准了 2 个新前缀,013 用于 Grameenphone,014 用于 Banglalink,现在更新表达式:

^(?:\+?88)?01[13-9]\d{8}$

是的,你的看起来更好 :) - kjetilh
请使用您提供的示例,通过以下链接检查并回复我:http://rubular.com/r/BvnSXDOYF8,此手机号码008801812596824是否有效。 - Majbah Habib
@MajbahHabib - 这个问题并没有要求以 00 开头的号码,所以不行。你可以相对容易地更改模式,例如,假设 00 是国际访问代码:^(?:(?:\+|00)?88)?01[15-9]\d{8}$ - Kobi

3
您可以使用以下任一正则表达式验证孟加拉移动电话号码。
解决方案1:
/(^(\+88|0088)?(01){1}[56789]{1}(\d){8})$/

Robi、Grameen Phone、Banglalink、Airtel 和 Teletalk 运营商的手机号码是允许的。

解决方案 2:

 /(^(\+8801|8801|01|008801))[1|5-9]{1}(\d){8}$/

只允许使用Citycell、Robi、Grameen Phone、Banglalink、Airtel和Teletalk运营商的手机号码。

允许的手机号码格式:

+8801812598624

008801812598624

01812598624

01712598624

01919598624

01672598624

01512598624

................

.................


1

如果您想快速测试以下正则表达式,请使用以下链接:

regex pal

[8]*01[15-9]\d{8}


1

我知道,那个问题早就被问过了,但我认为@G. M. Nazmul Hossain想要验证所选国家的手机号码。我向您展示如何使用来自Google的免费库libphonenumber进行操作。它适用于Java、C++和Javascript,但也有针对PHP和其他语言的分支。

+880告诉我这是孟加拉国的国家代码。让我们尝试在Javascript中使用以下代码验证示例号码:

String bdNumberStr = "8801711419556"
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
    //BD is default country code for Bangladesh (used for number without 880 at the begginning)
    PhoneNumber bdNumberProto = phoneUtil.parse(bdNumberStr, "BD");
} catch (NumberParseException e) {
    System.err.println("NumberParseException was thrown: " + e.toString());
}
boolean isValid = phoneUtil.isValidNumber(bdNumberProto); // returns true

那段代码也能处理带有空格的数字(例如“880 17 11 41 95 56”),甚至以00880开头(+有时会被00替换)。
演示页面上自己试一下。验证所有提供的示例甚至更多。

感谢您的帮助。 这很好,但它显示“8801311419556”和“8801411419556”为有效号码, 但这两种格式都是无效的手机号码。 - G. M. Nazmul Hossain
@G. M. Nazmul Hossain - 你确定它们无效吗?你可以在libphonenumber页面上报告错误:https://github.com/googlei18n/libphonenumber/issues 。Google正在全球建立数据库,所以他们可能会忽略一些事情 ;) - Paweł Tomkiel

0
使用正则表达式验证孟加拉国电话号码(Citycell,Robi,Grameen Phone,Banglalink,Airtel和Teletalk运营商):
$pattern = '/(^(\+8801|8801|01|008801))[1-9]{1}(\d){8}$/';
$BangladeshiPhoneNo = "+8801840001417";

if(preg_match($pattern, $BangladeshiPhoneNo)){
    echo "It is a valid Bangladeshi phone number;
}

0

0
**Laravel Bangladeshi Phone No validation for (Citycell, Robi, Grameen Phone, Banglalink, Airtel and Teletalk) and start with +88/88 then 01 then 356789 then 8 digit**  



public function rules()
        {
            return [

                'mobile' => 'sometimes|regex:/^(?:\+?88)?01[35-9]\d{8}$/',

            ];
        }

        public function messages()
        {

                'mobile.regex' => 'Mobile no should be bd standard',
            ];
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接