使用可选的 +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
,因此创建了一个字符类,表示0
或1
。
这里不需要捕获组,非捕获最适合可选子模式。
正如后续答案中所指出的,您使用的正则表达式实际上并未满足孟加拉国电话号码的所有要求,请参阅 Kobi 的 ^(?:\+?88|0088)?01[15-9]\d8$
答案。
为了创建一个正则表达式来验证具有“可选 +88
、0088
或 01
前面 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
。它只会匹配0
或1
以上是关于使用可选的 +88 或 01 前 11 位验证孟加拉国电话号码的主要内容,如果未能解决你的问题,请参考以下文章