Flutter - Validate a phone number using Regex

In my Flutter mobile app, I am trying to validate a phone number using regex. Below are the conditions.

  • Phone numbers must contain 10 digits.
  • In case country code us used, it can be 12 digits. (example country codes: +12, 012)
  • No space or no characters allowed between digits
  • In simple terms, here is are the only "valid" phone numbers

    0776233475, +94776233475, 094776233475

    Below is what I tried, but it do not work.

    String _phoneNumberValidator(String value) { Pattern pattern = r'/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/'; RegExp regex = new RegExp(pattern); if (!regex.hasMatch(value)) return 'Enter Valid Phone Number'; else return null; } 

    How can I solve this?

    5 Answers

    You could make the first part optional matching either a + or 0 followed by a 9. Then match 10 digits:

    ^(?:[+0]9)?[0-9]{10}$ 
    • ^ Start of string
    • (?:[+0]9)? Optionally match a + or 0 followed by 9
    • [0-9]{10} Match 10 digits
    • $ End of string

    Regex demo

    1

    Validation using Regex:

    String validateMobile(String value) { String pattern = r'(^(?:[+0]9)?[0-9]{10,12}$)'; RegExp regExp = new RegExp(pattern); if (value.length == 0) { return 'Please enter mobile number'; } else if (!regExp.hasMatch(value)) { return 'Please enter valid mobile number'; } return null; } 
     @override String validator(String value) { if (value.isEmpty) { return 'Mobile can\'t be empty'; } else if (value.isNotEmpty) { //bool mobileValid = RegExp(r"^(?:\+88||01)?(?:\d{10}|\d{13})$").hasMatch(value); bool mobileValid = RegExp(r'^(?:\+?88|0088)?01[13-9]\d{8}$').hasMatch(value); return mobileValid ? null : "Invalid mobile"; } } 

    I used the RegExp provided by @Dharmesh

    This is how you can do it with null safety.

    bool isPhoneNoValid(String? phoneNo) { if (phoneNo == null) return false; final regExp = RegExp(r'(^(?:[+0]9)?[0-9]{10,12}$)'); return regExp.hasMatch(phoneNo); } 

    Usage:

    bool isValid = isPhoneNoValid('your_phone_no'); 
    2
    String phoneNumberValidator(String value) { Pattern pattern = r'\+994\s+\([0-9]{2}\)\s+[0-9]{3}\s+[0-9]{2}\s+[0-9]{2}'; RegExp regex = new RegExp(pattern); if (!regex.hasMatch(value)) return 'Enter Valid Phone Number'; else return null; } 

    ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobG5tZWd%2FdHyOn6OurKSav27CwKWgnZmkmnqiec%2BhpqedXaPCrq7Eq2Suq5mjtG6%2BxKCcsQ%3D%3D