【问题标题】:Validate Bangladeshi phone number with optional +88 or 01 preceeding 11 digits使用可选的 +88 或 01 前 11 位验证孟加拉国电话号码
【发布时间】:2015-06-05 05:29:00
【问题描述】:

我正在使用以下正则表达式来验证印度电话号码。

我想要可选的 +88 或 01 在 11 位电话号码之前。

这是我正在使用的:

string mobileNumber = "+8801000000000";
if (new Regex(@"^([01]|\+88)?\d{11}").IsMatch(mobileNumber)){
    MessageBox.Show("Mobile number is valide", "All information is required", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else{
     MessageBox.Show("Mobile number is not valide", "All information is required", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

我该怎么做?

更新

如果我写手机号码。在 01 之前,如果超过 11 位,它会通知验证 mgs(Not valid mobile no.!)。好吧,我用过,13位时它失败了。它错误地更改了验证 mgs。

这是我的代码:

<input type="text" placeholder="Enter bKash wallet number" 
  class="form-control" ng-model="BkashWalletNo" ng-disabled="AutoConfirmed" 
    name="BkashWalletNo" ng-pattern="/^(?:\+88|01)?\d{11}\r?$/" />
<p class="help-block" ng-show="form.BkashWalletNo.$error.pattern">Not valid mobile no.!</p>

【问题讨论】:

  • 请注意-您的问题标题包含孟加拉国作为国名,而印度则在正文中。这是一个错误还是双关语?

标签: c# regex angularjs mobile


【解决方案1】:

您可以使用任何一种给定的解决方案来验证孟加拉国的手机号码。

正则表达式1:

/(^(\+88|0088)?(01){1}[3456789]{1}(\d){8})$/

正则表达式2

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

正则表达式 3

 (^([+]{1}[8]{2}|0088)?(01){1}[3-9]{1}\d{8})$

允许的手机号码示例

+8801812598624

008801812598624

01812598624

01712598624

01672598624

01919598624

01419598624

01319598624

【讨论】:

    【解决方案2】:

    我看到你已经尝试过,但你的正则表达式不准确。

    1. 您不使用字符串结尾 $ 锚点(因此,即使末尾的“abc”也不会阻止 IsMatch 返回 true
    2. 您在方括号内使用01,因此创建了一个字符类,表示01
    3. 这里不需要捕获组,非捕获最适合可选子模式。
    4. 正如后续答案中所指出的,您使用的正则表达式实际上并未满足孟加拉国电话号码的所有要求,请参阅 Kobi 的 ^(?:\+?88|0088)?01[15-9]\d{8}$ 答案。

    为了创建一个正则表达式来验证具有“可选 +88008801 前面 11 位数字”的字符串,您需要类似以下内容:

    @"^(?:(?:\+|00)88|01)?\d{11}$"
    

    RegexStorm demo

    更新

    如果您想使用此正则表达式验证孟加拉电话号码,则模式不会发生任何变化(只有 \r? 是完全多余的),但 如果您计划在 +88 或 @987654339 之后允许 13 或 11 位数字@,你需要使用交替:

    ng-pattern="/^(?:(?:\+|00)88|01)?\d{11}$/"
    

    demo

    在 Angular 中:

    Validators.pattern('(?:(?:\\+|00)88|01)?\\d{11}')
    // or
    Validators.pattern(/^(?:(?:\+|00)88|01)?\d{11}$/)
    

    【讨论】:

    • 你试过我的建议了吗?它是否按您的预期工作?如果没有,请告诉我。最好的问候。
    • thnx 终于对我有用了,适用于 bKash 手机号。验证它确实需要
    • 很高兴,请考虑接受答案。
    • 抱歉,还有问题。如果我写手机号码。在 01 之前,超过 11 位它会通知验证 mgs(无效的手机号码!)我用得很好,当 13 位时它会失败。它错误地改变了验证mgs...请修复它。 Thnx @stribizhev 这是我的代码:

      无效的手机号码!

    • 请检查我的更新。如果你还需要在01之前支持+/^\+(?:88|01)?(?:\d{11}|\d{13})$/。如果加号是可选的:/^(?:\+?(?:88|01)?)(?:\d{11}|\d{13})$/.
    【解决方案3】:

    可以在这里找到更好的答案:Validate Mobile number using regular expression

    这篇文章有两个很好的答案。总结

    解决方案一:使用正则表达式

    应该很简单:

    ^(?:\+?88|0088)?01[15-9]\d{8}$
    
    • ^ - 从字符串的开头
    • (?:\+?88|0088)? - 可选的88可能+ 或可选的0088 开头
    • 01 - 强制 01
    • [15-9] - “1 或 5 或 6 或 7 或 8 或 9”
    • \d{8} - 8 位数字
    • $ - 字符串结束

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

    解决方案 2:使用库

    下载这个免费库libphonenumber from Google。它适用于 Java、C++ 和 Javascript,但也有适用于 PHP 和我相信其他语言的 fork。

    +880 告诉我它是country code for Bangladesh。让我们尝试使用以下 Java 代码验证示例编号:

    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)。

    【讨论】:

      【解决方案4】:

      我的 JavaScript 解决方案适用于孟加拉语所有手机号码验证,带有额外的孟加拉语到英语转换。这个解决方案也适用于孟加拉号码

      几个例子和例子输出

      valid_mobile('+8801736458080');
      /* Output "01736458080" */
      
      valid_mobile('8801736458080');
      /* Output "01736458080" */
      
      valid_mobile('01736458080');
      /* Output "01736458080" */
      
      
      valid_mobile('+৮৮০১৭৩৬৪৫৮০৮০');
      /* Output "01736458080" */
      
      
      
      /*
          * Validate Bangladeshi mobile number
          * @author: Lincoln Mahmud
          * @company: Purple Patch
      */
      
      function valid_mobile ( value ) {
          /*When value not number then try to convert bangla to english number*/
          if (isNaN(value)) {
              value = translteBanglaToEngNum(value);
          }
          valid_number = value.match("(?:\\+88|88)?(01[3-9]\\d{8})"); /*Regular expression to validate number*/
          /*When valid return without +88/88 number if exist*/
          if(valid_number){
              return valid_number[1]; /*valid number method return 3 with actual input*/
          } else {
              return false; /*return false when not valid*/
          }
      }
      
      /*
          * Bangla to English number conversion method
          * @author: Lincoln Mahmud
          * @company: Purple Patch
      */
      
      function translteBanglaToEngNum( num_str ){
          var bengali = {"০":0, "১":1, "২":2, "৩":3, "৪":4, "৫":5, "৬":6, "৭":7, "৮":8, "৯":9};
          var changed_nun='';
          num_str.toString().split('').forEach(l => {
              if(isNaN(l)){changed_nun += bengali[l];}else{changed_nun +=l;}
          });
          return changed_nun;
      }
      

      【讨论】:

      • 孟加拉国移动验证的PHP解决方案(精确解决方案部分)function valid_mobile ( $value ) { preg_match("/^(?:\\+88|88)?(01[3-9]\\d{8})/",$value, $result); if($result){ return $result[1]; /*return exact validate number*/ } else { return false; /*return false when not valid*/ } } var_dump(valid_mobile('+8801373645808325324'));
      【解决方案5】:

      基本上,孟加拉国国家电话代码是 880,然后是 10 位数字。 国际电话可能以“+”或“00”开头。

      国家代码不用于本地呼叫,但首先必须为0。

      所以正则表达式如下所示:

      ^(((\+|00)?880)|0)(\d){10}$
      

      【讨论】:

        【解决方案6】:

        使用这个正则表达式 "^(?:+88|88)?(01[3-9]\d{8})$" 这涵盖了孟加拉国的所有移动运营商,例如:

        • 013xxxxxxxx
        • 014xxxxxxxx
        • 014xxxxxxxx
        • 016xxxxxxxx
        • 017xxxxxxxx
        • 018xxxxxxxx
        • 019xxxxxxxx

        例子:

        String mobileNumber ="01715254815";
        
        if(mobileNumber.matches("^(?:\\+88|88)?(01[3-9]\\d{8})$")){
            System.out.println("Yes valid");
        }
        

        【讨论】:

          【解决方案7】:

          此正则表达式将在以下条件下有效

          • +880 1760 123128
          • +(+880)-1760-123128
          • +8801996409999
          • +8801760-123128
          [+,' '][\d]{7}[-,$,' ',][\d]{0,6}|[+,' '][\d]{3}[,-,$,' ',][\d]{4}[-,$,' ',][\d]{0,6}|[(][(+,' '][\d]{3}[)][-,$,' '][\d]{4}\b[-,$,' ',][\d]{0,6}|[[+,' '][\d]{3}[-,$,' ',][\d]{4}[-,$,' ',][\d]{0,6}|[(][(+,' '][\d]{3}[)][-,$,' '][\d]{4}\b[-,$,' ',][\d]{0,6}|[+' '][\d]{0,13}|[+,' '][\d]{0,7}[-,$,' ',][\d]{0,6}
          

          【讨论】:

            【解决方案8】:

            使用正则表达式并与手机号码字符串匹配。

            string mobileNumber = "+8801000000000";
            if (new Regex(@"^(?:\+?88|0088)?01[15-9]\d{8}$").IsMatch(mobileNumber)){
                MessageBox.Show("Mobile number is valide", "All information is required", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else{
                 MessageBox.Show("Mobile number is not valide", "All information is required", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            

            【讨论】:

            • 这不会确保number前面有01。它只会匹配01
            猜你喜欢
            • 1970-01-01
            • 2012-05-22
            • 2010-09-15
            • 2012-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-09
            • 2011-03-22
            相关资源
            最近更新 更多