Flutter波斯语工具插件persian_tools的使用
Flutter波斯语工具插件persian_tools的使用
简介
Persian tools
一个可以在所有平台使用的波斯语Dart包
功能特性
以下是persian_tools
插件的主要功能:
- 去除序数词后缀:移除数字中的序数词后缀。
- 添加序数词后缀:给数字添加序数词后缀。
- 将波斯语单词转换为数字:将波斯语单词表示的数字转换为阿拉伯数字。
- 将波斯语数字转换为单词:将阿拉伯数字转换为波斯语单词。
- 在数字中添加和删除分隔符:为数字添加或删除千位分隔符。
- 波斯语数字与阿拉伯语、英语数字之间的转换:在不同语言的数字之间进行转换。
- 检查字符串是否包含波斯语:判断字符串中是否包含波斯语字符。
- 验证伊朗国民身份证:验证伊朗国民身份证的有效性。
- 通过国民身份证查找城市和省份名称:根据国民身份证获取所在的城市和省份信息。
- 计算账单:处理账单相关的操作。
- 验证银行账户IBAN(SHEBA):验证银行账户的IBAN号。
- 验证ATM卡号:验证ATM卡号的有效性。
- 验证伊朗电话号码:验证伊朗电话号码的有效性。
- 通过银行卡号查找银行名称:根据银行卡号获取银行名称。
- 从车牌获取信息:解析车牌信息。
- 修复和解码URL:处理带有空白的URL。
使用示例
添加序数词后缀
import 'package:persian_tools/persian_tools.dart';
void main() {
var number = 'سی سه'; // or سی | شصت | پنجاه دو
print(addOrdinalSuffix(number)); // 输出:سی سوم | سی اُم | شصتم | پنجاه دوم
/// 或者使用String扩展方法
print(number.withOrdinalSuffix); // 输出:... like so
}
去除序数词后缀
import 'package:persian_tools/persian_tools.dart';
void main() {
var number = 'چهل و سوم'; // سی سوم | سی اُم | شصتم | پنجاه دوم
print(removeOrdinalSuffix(number)); // 输出:سی | شصت | پنجاه دو
/// 或者使用String扩展方法
print(number.withoutOrdinalSuffix); // 输出:... like so
}
将波斯语单词转换为数字
import 'package:persian_tools/persian_tools.dart';
void main() {
final words = 'سه هزار دویست و دوازده';
/// 使用 [wordsToNumber] 方法将 [words] 转换为 int 类型的数字
print(wordsToNumber(words)); // 输出:3212
/// 使用 [wordsToNumberString] 方法将 [words] 转换为 String 类型的数字
print(wordsToNumberString(words)); // 输出:'3212' as String
/// [wordsToNumberString] 还有两个可选参数
/// 使用 [digit] 可选参数将数字转换为特定本地数字
/// 使用 [addComma] 在每三位数字间添加逗号
print(wordsToNumberString(
words,
digits: DigitLocale.fa,
addComma: true,
)); // 输出:'۳,۲۱۲' as String
/// 或者你可以轻松地在 String 对象上使用扩展方法
print(words.convertWordsToNumber()); // 输出:3212
print(words.convertWordsToNumberString()); // 输出:'3212' as String
}
将波斯语数字转换为单词
import 'package:persian_tools/persian_tools.dart';
void main() {
final stringDigit = '257,433';
final intDigit = -128;
/// 使用 [numberToWordsString] 方法将 [stringDigit] 转换为波斯语
print(numberToWordsString(stringDigit)); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سه'
/// [numberToWordsString] 还有一个可选参数
/// 默认情况下 [ordinal] 是 [false],[true] 表示输出是序数词
print(numberToWordsString(stringDigit, ordinal: true)); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سوم'
/// 使用 [numberToWordsInt] 方法将 [intDigit] 转换为波斯语
print(numberToWords(intDigit)); // 输出:'منفی صد و بیست و هشت'
/// [numberToWordsInt] 也有一个可选参数
/// 默认情况下 [ordinal] 是 [false],[true] 表示输出是序数词
print(numberToWords(intDigit, ordinal: true)); // 输出:'منفی صد و بیست و هشتم'
/// 你也可以在 int 或 String 对象上简单地使用扩展方法
print(stringDigit.convertNumToWords()); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سه'
print(intDigit.convertNumToWords()); // 输出:'منفی صد و بیست و هشت'
}
在数字中添加和删除分隔符
import 'package:persian_tools/persian_tools.dart';
void main() {
print(addCommas('3333')); // 输出:3,333
print(addCommas('۸۲۳۳۴۵')); // 输出:823,345
print(removeCommas('654,562')); // 输出:654562
print(removeCommas('3,365.255')); // 输出:3365.255
print('11222'.addComma); // 输出:11,222
print('4,544.562'.removeComma); // 输出:4544.562
}
波斯语数字与阿拉伯语、英语数字之间的转换
import 'package:persian_tools/persian_tools.dart';
void main() {
print(convertArToFa('السلام علیکم 14۱۲۳6٤٥')); // 输出:السلام علیکم 14۱۲۳6۴۵
print(convertArToEn('Persian Tools : 123٥٦٧')); // 输出:Persian Tools : 123567
print(convertEnToFa('سلام این هارو فارسی کن : 22۲۳۴')); // 输出:سلام این هارو فارسی کن : ۲۲۲۳۴
print(convertFaToEn('سلام این هارو اینگلیسی کن : 22۲۳۴')); // 输出:سلام این هارو اینگلیسی کن : 22234
}
检查字符串是否包含波斯语
import 'package:persian_tools/persian_tools.dart';
void main() {
print(isPersian('این یک متن فارسی است؟')); // 输出:true
print(isPersian('هل هذا نص فارسي؟')); // 输出:false
print(hasPersian('This text includes فارسی')); // 输出:true
print(hasPersian('Это персидский س текст?')); // 输出:true
print(hasPersian('أكد رئيس اللجنة العسكرية الممثلة لحكومة الوفاق أراضي البلاد.')); // 输出:true
}
验证伊朗国民身份证
import 'package:persian_tools/persian_tools.dart';
void main() {
var nationalID = '0684159414';
print(verifyIranianNationalId(nationalID)); // 输出:true
/// 国民身份证应包含10位数字,以下验证应返回 false
nationalID = '00000';
print(verifyIranianNationalId(nationalID)); // 输出:false
/// 使用 [String] 类上的扩展方法验证国民身份证
nationalID = '';
print(nationalID.isIranianNationalId); // 输出:false
}
通过国民身份证查找城市和省份名称
import 'package:persian_tools/persian_tools.dart';
void main() {
final place = getPlaceByIranNationalId('0084575948');
print(place?.city.name); // 输出:تهران مرکزی
print(place?.province.name); // 输出:تهران
/// 使用 [String] 类上的扩展方法获取位置信息
final nationalId = '2110990147';
print(nationalId.getPlaceNationalId?.city.name); // 输出:گرگان
print(nationalId.getPlaceNationalId?.province.name); // 输出:گلستان
}
计算账单
import 'package:persian_tools/persian_tools.dart';
void main() {
var bill = Bill(billId: 9174639504124, paymentId: 12908197, currency: 'rial');
print(bill.barcode); // 输出:917463950412400012908197
print(bill.billType); // 输出:برق
print(bill.amount); // 输出:129000
print(bill.isBillValid); // 输出:false
print(bill.isPaymentIdValid); // 输出:false
print(bill.isBillIdValid); // 输出:true
// 返回上述所有 getter 的 Map,与 getter 相同
print(bill());
}
验证银行账户IBAN(SHEBA)
import 'package:persian_tools/persian_tools.dart';
void main() {
var sheba = Sheba('IR820540102680020817909002');
var bank = sheba(); // 返回 BankInformation 对象
print(bank?.nickname); // 输出:银行昵称
print(bank?.name); // 输出:银行完整名称
print(bank?.persianName); // 输出:银行完整波斯语名称
print(bank?.code); // 输出:银行代码
// true 表示可以获取账户号,false 表示无法获取
print(bank?.isAccountNumberAvailable);
print(bank?.accountNumber); // 输出:简单格式的账户号
print(bank?.formattedAccountNumber); // 输出:带连字符的账户号
print(bank?.process);
print(sheba.isValid); // 输出:true
}
验证ATM卡号
import 'package:persian_tools/persian_tools.dart';
void main() {
print(validateCardNumber('6219861034529007')); // 输出:true
print(validateCardNumber('6219861034529007')); // 输出:true
print(validateCardNumber('0000000000000000')); // 输出:false
print(validateCardNumber('621986103452900')); // 输出:false
}
验证伊朗电话号码
import 'package:persian_tools/persian_tools.dart';
void main() {
final phoneNumber = '09022002580';
// 验证电话号码
print(phoneNumberValidator(phoneNumber)); // 输出:true
// 获取电话号码前缀
print(getPhonePrefix(phoneNumber)); // 输出:902
// 获取电话号码详情
final operatorDetail = getPhoneNumberDetail(phoneNumber);
print(operatorDetail?.name); // 输出:ایرانسل
print(operatorDetail?.provinces); // 输出:[]
print(operatorDetail?.base); // 输出:کشوری
print(operatorDetail?.type); // 输出:SimCartType.both
/// 你也可以在 [String] 类上使用这些方法作为扩展方法
// 验证电话号码
print(phoneNumber.isPhoneNumber); // 输出:true
// 获取电话号码前缀
print(phoneNumber.phoneNumberPrefix); // 输出:902
// 获取电话号码详情
print(phoneNumber.phoneNumberDetail?.name); // 输出:ایرانسل
}
通过银行卡号查找银行名称
import 'package:persian_tools/persian_tools.dart';
void main() {
final cardNumber = '6037701689095443';
final bankInfo = getBankNameFromCardNumber(cardNumber);
print(bankInfo?.name); // 输出:بانک کشاورزی
print(bankInfo?.initCode); // 输出:603770
/// 你也可以在 [String] 类上使用这些方法作为扩展方法
// 从 String 获取银行信息
print(cardNumber.bankNameFromCard?.name); // 输出:بانک کشاورزی
}
从车牌获取信息
import 'package:persian_tools/persian_tools.dart';
void main() {
var motorcyclePlate = Plate(plate: '12345678');
print(motorcyclePlate.info.type); // 输出:Motorcycle
print(motorcyclePlate.info.template); // 输出:123-45678
print(motorcyclePlate.info.province); // 输出:مرکز تهران
print(motorcyclePlate.info.category); // 输出:null because its type is Motorcycle
print(motorcyclePlate.isValid); // 输出:true
// 由于波斯语的原因,你可能会看到错误形式的车牌
var carPlate = Plate(plate: '12ب14547');
print(carPlate.info.type); // 输出:Car
print(carPlate.info.template); // 输出:12{B}145{Iran}47 , B=ب Iran=ایران
print(carPlate.info.province); // 输出:مرکزی
print(carPlate.info.category); // 输出:شخصی
print(carPlate.isValid); // 输出:true
// 你也可以使用下面的 String 扩展方法创建 [Plate]
var motorPlate = '12345678'.createVehiclePlate;
print(motorPlate.info.type); // 输出:Motorcycle
print(motorPlate.info.template); // 输出:123-45678
print(motorPlate.info.province); // 输出:مرکز تهران
print(motorPlate.info.category); // 输出:null because its type is Motorcycle
print(motorPlate.isValid); // 输出:true
}
修复和解码URL
import 'package:persian_tools/persian_tools.dart';
void main() {
var url = 'wss://hostname.domain/?q=i am a wrong query';
print(urlFix(url)); // 输出:wss://hostname.domain/?q=i%20am%20a%20wrong%20query
}
以上就是 persian_tools
插件的基本使用方法和一些常见的使用场景。希望这些示例能帮助你在Flutter项目中更好地处理波斯语相关的内容。如果你有任何问题或需要更多帮助,请随时查阅官方文档或访问GitHub仓库。
更多关于Flutter波斯语工具插件persian_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter波斯语工具插件persian_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用波斯语工具插件 persian_tools
的示例代码。这个插件提供了一系列用于处理波斯语(Farsi)文本的实用功能,如数字转波斯文、日期格式化等。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 persian_tools
依赖:
dependencies:
flutter:
sdk: flutter
persian_tools: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你需要使用 persian_tools
的 Dart 文件中导入插件:
import 'package:persian_tools/persian_tools.dart';
3. 使用插件功能
3.1 数字转换为波斯文
void main() {
// 示例数字
int number = 1234567890;
// 转换为波斯文数字
String persianNumber = PersianTools.numberToPersian(number);
print(persianNumber); // 输出: ١٢٣٤٥٦٧٨٩٠
}
3.2 波斯文数字转换回阿拉伯数字
void main() {
// 示例波斯文数字
String persianNumber = "١٢٣٤٥٦٧٨٩٠";
// 转换为阿拉伯数字
int number = PersianTools.persianToNumber(persianNumber);
print(number); // 输出: 1234567890
}
3.3 格式化日期为波斯文格式
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import 'package:jdate/jdate.dart';
import 'package:persian_tools/persian_tools.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('波斯文日期格式化示例'),
),
body: Center(
child: Text(formatPersianDate()),
),
),
);
}
String formatPersianDate() {
// 获取当前日期
JalaliDate now = JalaliDate.now();
// 格式化日期为波斯文格式
return PersianTools.formatDate(now, 'EEEE, d MMMM yyyy');
}
}
在上面的代码中,我们使用了 jdate
插件来获取和处理波斯历(Jalali)日期。确保你已经在 pubspec.yaml
中添加了 jdate
依赖:
dependencies:
flutter:
sdk: flutter
persian_tools: ^最新版本号
jdate: ^最新版本号 # 请替换为实际的最新版本号
4. 运行应用
确保你已经完成了上述步骤,然后运行你的 Flutter 应用。你应该能够在界面上看到波斯文格式的日期,并且能够正确地进行数字与波斯文数字的转换。
这个示例展示了如何集成和使用 persian_tools
插件的一些基本功能。你可以查阅插件的官方文档以了解更多高级功能和用法。