使用可选的 +88 或 01 前 11 位验证孟加拉国电话号码

Posted

技术标签:

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

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

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

这是我正在使用的:

string mobileNumber = "+8801000000000";
if (new Regex(@"^([01]|\+88)?\d11").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)?\d11\r?$/" />
<p class="help-block" ng-show="form.BkashWalletNo.$error.pattern">Not valid mobile no.!</p>

【问题讨论】:

请注意-您的问题标题包含孟加拉国作为国名,而印度则在正文中。这是一个错误还是双关语? 【参考方案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\d8)$

允许的手机号码示例

+8801812598624

008801812598624

01812598624

01712598624

01672598624

01919598624

01419598624

01319598624

【讨论】:

【参考方案2】:

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

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

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

@"^(?:(?:\+|00)88|01)?\d11$"

见RegexStorm demo

更新

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

ng-pattern="/^(?:(?:\+|00)88|01)?\d11$/"

见demo

在 Angular 中:

Validators.pattern('(?:(?:\\+|00)88|01)?\\d11')
// or
Validators.pattern(/^(?:(?:\+|00)88|01)?\d11$/)

【讨论】:

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

无效的手机号码!

请检查我的更新。如果你还需要在01之前支持+/^\+(?:88|01)?(?:\d11|\d13)$/。如果加号是可选的:/^(?:\+?(?:88|01)?)(?:\d11|\d13)$/.【参考方案3】:

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

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

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

应该很简单:

^(?:\+?88|0088)?01[15-9]\d8$
^ - 从字符串的开头 (?:\+?88|0088)? - 可选的88可能+ 或可选的0088 开头 01 - 强制 01 [15-9] - “1 或 5 或 6 或 7 或 8 或 9” \d8 - 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]\\d8)"); /*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];elsechanged_nun +=l;
    );
    return changed_nun;

【讨论】:

孟加拉国移动验证的PHP解决方案(精确解决方案部分)function valid_mobile ( $value ) preg_match("/^(?:\\+88|88)?(01[3-9]\\d8)/",$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]\d8)$" 这涵盖了孟加拉国的所有移动运营商,例如:

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

例子:

String mobileNumber ="01715254815";

if(mobileNumber.matches("^(?:\\+88|88)?(01[3-9]\\d8)$"))
    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]\d8$").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

以上是关于使用可选的 +88 或 01 前 11 位验证孟加拉国电话号码的主要内容,如果未能解决你的问题,请参考以下文章

仅在 IE 中固定定位元素闪烁,如何解决?

聚合函数或 GROUP BY 子句

使用逻辑回归进行特征选择

android 信用卡扫描库或任何 API(Card.io 除外)

文件权限的介绍和使用(第六章之前)

来自 libsvm 的 100% 准确度