C# 使用可选的+;11位之前的88或01

C# 使用可选的+;11位之前的88或01,c#,regex,angularjs,mobile,C#,Regex,Angularjs,Mobile,我使用下面的正则表达式来验证一个印度电话号码 我想要可选的+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", MessageBoxButton

我使用下面的正则表达式来验证一个印度电话号码

我想要可选的+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(无效手机号)
。我用过,当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>

手机号码无效

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


我知道你试过了,但你的正则表达式不准确

  • 您不使用字符串末尾的
    $
    锚点(因此,即使末尾的“abc”也不会阻止
    IsMatch
    返回
    true
  • 您正在方括号内使用
    01
    ,因此创建了一个字符类,表示
    0
    1
  • 在这里不需要捕获组,对于可选的子模式,非捕获是最好的
  • 正如后续回答中所指出的,您使用的正则表达式实际上不符合孟加拉国电话号码的所有要求,请参见Kobi的回答
  • 为了创建一个正则表达式来验证“可选+88或01在11位之前”的字符串,您需要如下内容:

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

    更新

    如果要使用此正则表达式验证孟加拉国电话号码,模式中没有任何更改(只有
    \r?
    是完全冗余的),但如果您计划在
    +88
    01
    之后允许13或11位数字,则需要使用一个替代选项:

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

    参见

    这里可以找到更好的答案:

    这篇文章有两个很好的答案。它们的摘要

    解决方案1:使用正则表达式 应该很简单:

    ^(?:\+?88|0088)?01[15-9]\d{8}$
    
    • ^
      -从字符串开始
    • (?:\+?88 | 0088)?
      -可选
      88
      ,可从
      +
      或可选
      0088
      开始
    • 01
      -强制
      01
    • [15-9]
      -“1或5或6或7或8或9”
    • \d{8}
      -8位数字
    • $
      -字符串结尾
    工作示例:

    解决方案2:使用库 下载这个免费的图书馆。它可以用于java、C++和JavaScript,但也有PHP的分支,我相信其他语言。 +880告诉我这是一个错误。让我们尝试用以下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”),甚至在Beggining处带有00880(+有时替换为00)。

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

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

    因此正则表达式如下所示:

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

    您可以使用任意一个给定的解决方案来验证孟加拉国移动电话号码

    正则表达式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

    0088012598624

    01812598624

    01712598624

    01672598624

    01919598624

    01419598624

    01319598624


    etc

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

    • 013xxxxxxxx
    • 014xxxxxxx
    • 014xxxxxxx
    • 016xxxxxxxx
    • 017xxxxxxxx
    • 018xxxxxxx
    • 019xxxxxxxx
    例如:

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

    这将无法确保
    number
    前面有
    01
    。它将只匹配
    0
    1
    您尝试过我的建议吗?在你这边,它是否如预期的那样工作?如果没有,请告诉我。最后,它对我来说是有效的,BKASH Mobile No.Value:它确实是很高兴的,请考虑接受这个答案。抱歉,还有个问题。如果我在01之前写手机号,超过11位,它会通知我使用的验证mgs(无效手机号!),当13位时它会失败。它错误地更改了验证mgs。。。请把它修好。Thnx@stribizhev这是我的代码:

    无效的手机号码

    请检查我的更新。如果您还需要在
    01
    之前支持
    +
    :。如果加号是可选的:。请注意-您的问题标题包含孟加拉国作为国家名称,而正文中包含印度。这是一个错误还是双关语?太棒了。你救了我一天。谢谢你,兄弟。欢迎@OmarFaruqueSohag
    String mobileNumber ="01715254815";
    
    if(mobileNumber.matches("^(?:\\+88|88)?(01[3-9]\\d{8})$")){
        System.out.println("Yes valid");
    }