validatePhoneNumber static method

String? validatePhoneNumber(
  1. String? value, {
  2. String countryCode = 'US',
  3. bool allowInternational = false,
})

Implementation

static String? validatePhoneNumber(
  String? value, {
  String countryCode = 'US',
  bool allowInternational = false,
}) {
  if (value == null || value.isEmpty) {
    return 'Phone number is required.';
  }

  // Remove common formatting characters
  String cleanNumber = value.replaceAll(RegExp(r'[\s\-\(\)]'), '');

  if (allowInternational) {
    // International phone validation (supports + country code)
    final internationalRegExp = RegExp(r'^\+?[1-9]\d{1,14}$');
    if (!internationalRegExp.hasMatch(cleanNumber)) {
      return 'Invalid international phone number format.';
    }
  } else {
    // Country-specific validation
    switch (countryCode.toUpperCase()) {
      case 'US':
        final usRegExp = RegExp(r'^\d{10}$');
        if (!usRegExp.hasMatch(cleanNumber)) {
          return 'Invalid US phone number format (10 digits required).';
        }
        break;
      case 'UK':
        final ukRegExp = RegExp(r'^\d{10,11}$');
        if (!ukRegExp.hasMatch(cleanNumber)) {
          return 'Invalid UK phone number format.';
        }
        break;
      default:
        final generalRegExp = RegExp(r'^\d{8,15}$');
        if (!generalRegExp.hasMatch(cleanNumber)) {
          return 'Invalid phone number format.';
        }
    }
  }

  return null;
}