Validate Bangladeshi phone number with optional +88 or 01 preceeding 11 digits
Solution 1
I see you have tried but your regex is not accurate.
- You do not use an end of string
$
anchor (thus, even "abc" at the end will not prevent theIsMatch
from returningtrue
) - You are using
01
inside square brackets thus creating a character class, meaning either0
or1
. - No need in a capturing group here, a non-capturing is best for optional subpatterns.
- As has been pointed out in the follow up answers, the regex you are using is not actually meeting all the requirements for the Bangladeshi phone number, see Kobi's
^(?:\+?88|0088)?01[15-9]\d{8}$
answer.
In order to create a regex that will validate a string that has "optional +88
, 0088
or 01
preceeding 11 digits", you need something like:
@"^(?:(?:\+|00)88|01)?\d{11}$"
See RegexStorm demo
UPDATE
If you want to validate Bangladeshi phone numbers with this regex, nothing changes in the pattern (only \r?
is totally redundant), but if you plan to allow 13 or 11 digits after +88
or 01
, you need to use an alternation:
ng-pattern="/^(?:(?:\+|00)88|01)?\d{11}$/"
See demo
In Angular:
Validators.pattern('(?:(?:\\+|00)88|01)?\\d{11}')
// or
Validators.pattern(/^(?:(?:\+|00)88|01)?\d{11}$/)
Solution 2
You may use any one of given solution to validate Bangladeshi mobile number.
regular expression 1:
/(^(\+88|0088)?(01){1}[3456789]{1}(\d){8})$/
regular expression 2
/(^(\+8801|8801|01|008801))[1|3-9]{1}(\d){8}$/
regular expression 3
(^([+]{1}[8]{2}|0088)?(01){1}[3-9]{1}\d{8})$
Allowed mobile number sample
+8801812598624
008801812598624
01812598624
01712598624
01672598624
01919598624
01419598624
01319598624
etc
Solution 3
A better answer can be found here: Validate Mobile number using regular expression
There is two good answer in this post. Summary of them
Solution-1: Using regular expression
Should be pretty simple:
^(?:\+?88|0088)?01[15-9]\d{8}$
-
^
- From start of the string -
(?:\+?88|0088)?
- optional88
, which may begin in+
or optional0088
-
01
- mandatory01
-
[15-9]
- "1 or 5 or 6 or 7 or 8 or 9" -
\d{8}
- 8 digits -
$
- end of the string
Working example: http://rubular.com/r/BvnSXDOYF8
Solution-2: Using Library
Download this free library libphonenumber from Google. It's available for Java, C++ and Javascript, but there're also fork for PHP and, i believe, other languages.
+880 tells me that it's country code for Bangladesh. Let's try to validate example numbers with following code in 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
That code will handle also numbers with spaces in it (for example "880 17 11 41 95 56"), or even with 00880 at the beggininng (+ is sometimes replaced with 00).
Solution 4
My JavaScript Solution for Bangladeshi All mobile number validation with Extra Bangla to English convert. This solution also with for Bangla number
Few Example and example output
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;
}
Md Imran Choudhury
Software engineering graduate with more than 4+ years of experience in efficient Mobile application development. Highly experienced in Android development in Kotlin/JAVA. Also, have solid iOS development skrill in Swift. I love to write clean code and follow best practices. Seeking to move into a new engineering position where I can take new challenges and excel in my knowledge. Exploring segments of large-scale application architecture-related skills. For more information about me, please visit my LinkedIn profile and have a look at my GitHub account. Contact: Website: http://www.infixsoft.com/ Email: [email protected]
Updated on June 05, 2022Comments
-
Md Imran Choudhury almost 2 years
I am using the following regular expression to validate an Indian phone number.
I want optional +88 or 01 before 11 digits of phone.
Here is what I am using:
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); }
How can I do it?
UPDATE
If I write mobile no. preceding
01
, for more than 11 digit it notify validationmgs(Not valid mobile no.!)
. Well I used, it fails when 13 digit. It alters validation mgs wrongly.Here is my code:
<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>
-
maksbd19 over 7 yearsjust a note- your question title contains Bangladesh as country name whereas India is in the body. Is this a mistake or pun intended?
-
-
vks almost 9 yearsThis will not make sure that
number
has01
before it.It will only match0
or1
-
Wiktor Stribiżew almost 9 yearsHave you tried my suggestion? Does it work as expected on your side? If not, please let me know. Best regards.
-
X-Coder over 8 yearsthnx finally it works for me, for bKash mobile no. validation it was exactly need
-
Wiktor Stribiżew over 8 yearsGlad it did, please consider accepting the answer then.
-
X-Coder over 8 yearsSorry there is a problem yet. If I write mobile no. preceding 01, for more than 11 digit it notify validation mgs(Not valid mobile no.!) well I used, it fails when 13 digit. It alters validation mgs wrongly... plz fix it. Thnx @stribizhev here is my code: <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>
-
Wiktor Stribiżew over 8 yearsPlease check my update. If you need to also support
+
before01
:/^\+(?:88|01)?(?:\d{11}|\d{13})$/
. If the plus is optional:/^(?:\+?(?:88|01)?)(?:\d{11}|\d{13})$/
. -
lincolndu almost 3 yearsPHP solution for Bangladeshi Mobile validation (Exact solution part)
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'));