37 lines
950 B
Dart
37 lines
950 B
Dart
class PhoneHelper {
|
|
static String normalizePhone(String phone) {
|
|
final raw = phone.trim();
|
|
if (raw.isEmpty) return '';
|
|
|
|
final digits = raw.replaceAll(RegExp(r'\D'), '');
|
|
if (digits.isEmpty) return raw;
|
|
|
|
if (raw.startsWith('+')) {
|
|
return '+$digits';
|
|
}
|
|
|
|
if (raw.startsWith('00') && digits.length > 2) {
|
|
return '+${digits.substring(2)}';
|
|
}
|
|
|
|
// Iranian local formats
|
|
if (digits.length == 11 && digits.startsWith('0')) {
|
|
return '+98${digits.substring(1)}';
|
|
}
|
|
if (digits.length == 10) {
|
|
return '+98$digits';
|
|
}
|
|
if (digits.startsWith('98') && digits.length >= 12 && digits.length <= 15) {
|
|
return '+$digits';
|
|
}
|
|
|
|
// Preserve full international numbers instead of collapsing them to
|
|
// the last 10 digits, which can merge different identities together.
|
|
if (digits.length >= 11 && digits.length <= 15) {
|
|
return '+$digits';
|
|
}
|
|
|
|
return raw;
|
|
}
|
|
}
|