extension Allph on String { bool startsWithEnglish() { // Regular expression to check if the first character is an English letter return RegExp(r'^[A-Za-z]').hasMatch(this); } bool startsWithPersian() { // Regular expression to check if the first character is a Persian letter return RegExp(r'^[\u0600-\u06FF]').hasMatch(this); } bool containsOnlyEnglish() { return RegExp(r'^[a-zA-Z0-9@#$%^&*()_+-=!~/:;,.\|?]+$').hasMatch(this); } bool containsOnlyPersianOrArabic() { return RegExp(r'^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\s]+$') .hasMatch(this); } bool isImage() { final extension = split('.').last.toLowerCase(); const imageExtensions = [ 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff' ]; return imageExtensions.contains(extension); } bool isDocument() { final extension = split('.').last.toLowerCase(); const documentExtensions = [ 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt' ]; return documentExtensions.contains(extension); } bool isAudio() { final extension = split('.').last.toLowerCase(); const audioExtensions = ['mp3', 'wav', 'aac', 'ogg', 'flac']; return audioExtensions.contains(extension); } bool isVideo() { final extension = split('.').last.toLowerCase(); const videoExtensions = ['mp4', 'avi', 'mov', 'wmv', 'mkv', 'flv']; return videoExtensions.contains(extension); } String convertToEnglishNumber() { final Map persianToEnglishMap = { '۰': '0', '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', }; return split('').map((char) { return persianToEnglishMap[char] ?? char; // Replace with English number if exists, else keep original char }).join(''); } String? getFirstmageTag() { RegExp exp = RegExp(r']+src="([^">]+)"'); Match? match = exp.firstMatch(this); if (match != null) { String imageUrl = match.group(1)!; return imageUrl; } return null; } }