Flutter字符串验证插件string_validator的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter字符串验证插件string_validator的使用

string_validator 是一个用于Dart的字符串验证和清理库,它源自于validator.dart,而后者又是validator.js的移植版本。这个库提供了多种方法来验证和清理字符串,非常适合在Flutter项目中用来确保用户输入的正确性。

Validators 验证器

string_validator 提供了大量的验证器来检查字符串是否符合特定的规则或模式,包括但不限于:

  • equals(String str, comparison) - 检查字符串是否与给定的比较值相等。
  • contains(String str, seed) - 检查字符串是否包含指定的子串。
  • matches(String str, pattern) - 检查字符串是否匹配指定的正则表达式模式。
  • isEmail(String str) - 检查字符串是否为有效的电子邮件地址。
  • isURL(String str [, options]) - 检查字符串是否为有效的URL。
  • isFQDN(String str [, options]) - 检查字符串是否为有效的完全限定域名(如 domain.com)。
  • isIP(String str [, version]) - 检查字符串是否为有效的IPv4或IPv6地址。
  • isAlpha(String str) - 检查字符串是否只包含字母(a-zA-Z)。
  • isNumeric(String str) - 检查字符串是否只包含数字。
  • isAlphanumeric(String str) - 检查字符串是否只包含字母和数字。
  • isBase64(String str) - 检查字符串是否为base64编码。
  • isHexadecimal(String str) - 检查字符串是否为十六进制数。
  • isHexColor(String str) - 检查字符串是否为十六进制颜色代码。
  • isLowercase(String str) - 检查字符串是否全部为小写字母。
  • isUppercase(String str) - 检查字符串是否全部为大写字母。
  • isInt(String str) - 检查字符串是否为整数。
  • isFloat(String str) - 检查字符串是否为浮点数。
  • isDivisibleBy(String str, number) - 检查字符串表示的数字是否能被另一个数字整除。
  • isLength(String str, min [, max]) - 检查字符串长度是否在一个范围内。
  • isByteLength(String str, min [, max]) - 检查字符串字节长度是否在一个范围内。
  • isUUID(String str [, version]) - 检查字符串是否为有效的UUID(支持版本3、4或5)。
  • isDate(String str) - 检查字符串是否为有效的日期。
  • isAfter(String str [, date]) - 检查字符串表示的日期是否在指定日期之后。
  • isBefore(String str [, date]) - 检查字符串表示的日期是否在指定日期之前。
  • isIn(String str, values) - 检查字符串是否在允许值列表中。
  • isCreditCard(String str) - 检查字符串是否为有效的信用卡号。
  • isISBN(String str [, version]) - 检查字符串是否为有效的ISBN(支持版本10或13)。
  • isJSON(String str) - 检查字符串是否为有效的JSON格式。
  • isMultibyte(String str) - 检查字符串是否包含多字节字符。
  • isAscii(String str) - 检查字符串是否只包含ASCII字符。
  • isFullWidth(String str) - 检查字符串是否包含全角字符。
  • isHalfWidth(String str) - 检查字符串是否包含半角字符。
  • isVariableWidth(String str) - 检查字符串是否同时包含全角和半角字符。
  • isSurrogatePair(String str) - 检查字符串是否包含代理对字符。
  • isMongoId(String str) - 检查字符串是否为有效的MongoDB ObjectId。

Sanitizers 清理器

除了验证功能外,string_validator 还提供了一些清理工具,可以将输入转换成更规范的形式:

  • toString(String input) - 将输入转换为字符串。
  • toDate(String input) - 将输入转换为日期对象,如果输入不是有效日期,则返回null。
  • toFloat(String input) - 将输入转换为浮点数,如果输入不是有效浮点数,则返回NaN。
  • toInt(String input [, radix]) - 将输入转换为整数,如果输入不是有效整数,则返回NaN。
  • toBoolean(String input [, strict]) - 将输入转换为布尔值。非严格模式下,除了’0’、‘false’和’'外的所有输入都返回true;严格模式下只有’1’和’true’返回true。
  • trim(String input [, chars]) - 从输入字符串两端去除指定字符(默认为空白字符)。
  • ltrim(String input [, chars]) - 从输入字符串左端去除指定字符。
  • rtrim(String input [, chars]) - 从输入字符串右端去除指定字符。
  • escape(String input) - 将<、>、&、'和"替换为HTML实体。
  • stripLow(String input [, keep_new_lines]) - 去除数值小于32和127的字符,主要是控制字符。如果keep_new_lines为true,则保留换行符(\n和\r)。
  • whitelist(String input, chars) - 删除不在白名单中的字符。
  • blacklist(String input, chars) - 删除在黑名单中的字符。
  • normalizeEmail(String email [, options]) - 标准化电子邮件地址,根据选项调整大小写并移除Gmail邮箱中的无效字符。

Extension Methods 扩展方法

为了方便使用这些验证器和清理工具,string_validator 包含了扩展方法,可以直接在字符串实例上调用,使代码更加简洁易读。

示例用法

以下是一些如何使用扩展方法的例子:

import 'package:string_validator/string_validator.dart';

void main() {
  // 使用验证器扩展方法
  String email = 'example@gmail.com';
  bool isEmailValid = email.isEmail;

  String url = 'https://example.com';
  bool isUrlValid = url.isURL();

  String ip = '192.168.0.1';
  bool isIpValid = ip.isIP();

  String alpha = 'abc';
  bool isAlphaValid = alpha.isAlpha;

  String numeric = '123';
  bool isNumericValid = numeric.isNumeric;

  String alphanumeric = 'abc123';
  bool isAlphanumericValid = alphanumeric.isAlphanumeric;

  String base64 = 'aGVsbG8gd29ybGQ=';
  bool isBase64Valid = base64.isBase64;

  String integer = '12345';
  bool isIntValid = integer.isInt;

  String float = '123.45';
  bool isFloatValid = float.isFloat;

  String hex = '1f';
  bool isHexValid = hex.isHexadecimal;

  String hexColor = '#ff0000';
  bool isHexColorValid = hexColor.isHexColor;

  String lower = 'hello';
  bool isLowerValid = lower.isLowercase;

  String upper = 'HELLO';
  bool isUpperValid = upper.isUppercase;

  String divisible = '10';
  bool isDivisibleValid = divisible.isDivisibleBy(2);

  String length = 'hello';
  bool isLengthValid = length.isLength(3, 6);

  String byteLength = 'hello';
  bool isByteLengthValid = byteLength.isByteLength(3, 10);

  String uuid = '550e8400-e29b-41d4-a716-446655440000';
  bool isUuidValid = uuid.isUUID();

  String date = '2023-05-17';
  bool isDateValid = date.isDate;

  String afterDate = '2024-01-01';
  bool isAfterValid = afterDate.isAfter('2023-12-31');

  String beforeDate = '2023-01-01';
  bool isBeforeValid = beforeDate.isBefore('2024-01-01');

  String inList = 'apple';
  bool isInValid = inList.isIn(['apple', 'banana', 'cherry']);

  String creditCard = '4111111111111111';
  bool isCreditCardValid = creditCard.isCreditCard;

  String isbn = '978-3-16-148410-0';
  bool isIsbnValid = isbn.isISBN();

  String json = '{"name": "John"}';
  bool isJsonValid = json.isJson;

  String multibyte = '你好';
  bool isMultibyteValid = multibyte.isMultibyte;

  String ascii = 'Hello';
  bool isAsciiValid = ascii.isAscii;

  String fullWidth = 'Hello';
  bool isFullWidthValid = fullWidth.isFullWidth;

  String halfWidth = 'Hello';
  bool isHalfWidthValid = halfWidth.isHalfWidth;

  String variableWidth = 'Hello';
  bool isVariableWidthValid = variableWidth.isVariableWidth;

  String surrogatePair = '𐍈';
  bool isSurrogatePairValid = surrogatePair.isSurrogatePair;

  String mongoId = '507f1f77bcf86cd799439011';
  bool isMongoIdValid = mongoId.isMongoId;

  // 使用清理器扩展方法
  String dateStr = '2024-05-18';
  DateTime? parsedDate = dateStr.toDate();

  String floatStr = '123.45';
  double parsedFloat = floatStr.toFloat();

  String intStr = '123';
  int parsedInt = intStr.toInt();

  String boolStr = 'true';
  bool parsedBool = boolStr.toBoolean();

  String trimStr = '  hello world  ';
  String trimmedStr = trimStr.trim();

  String ltrimStr = '  hello';
  String ltrimmedStr = ltrimStr.ltrim();

  String rtrimStr = 'hello  ';
  String rtrimmedStr = rtrimStr.rtrim();

  String whitelistStr = 'abcdef';
  String whitelistedStr = whitelistStr.whitelist('abc');

  String blacklistStr = 'abcdef';
  String blacklistedStr = blacklistStr.blacklist('abc');

  String stripLowStr = 'hello\u0000world';
  String strippedLowStr = stripLowStr.stripLow();

  String escapeStr = '&lt;div&gt;"Hello"&amp;&lt;/div&gt;';
  String escapedStr = escapeStr.escape();

  String normalizeEmailStr = 'Example+test@gmail.com';
  String normalizedEmail = normalizeEmailStr.normalizeEmail();
}

通过上述示例可以看出,string_validator 提供了一套丰富的API,可以帮助开发者轻松实现对字符串的各种验证和清理操作,从而提高应用的数据质量和用户体验。


更多关于Flutter字符串验证插件string_validator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter字符串验证插件string_validator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用string_validator插件进行字符串验证的代码示例。这个插件提供了多种验证功能,包括电子邮件、URL、电话号码、信用卡号等的验证。

首先,确保你已经在pubspec.yaml文件中添加了string_validator依赖:

dependencies:
  flutter:
    sdk: flutter
  string_validator: ^0.2.0  # 请确保使用最新版本

然后运行flutter pub get来安装依赖。

接下来是一个完整的Flutter应用程序示例,展示了如何使用string_validator插件进行各种字符串验证:

import 'package:flutter/material.dart';
import 'package:string_validator/string_validator.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'String Validator Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _urlController = TextEditingController();
  final TextEditingController _phoneController = TextEditingController();
  final TextEditingController _creditCardController = TextEditingController();
  String _emailValidationMessage = '';
  String _urlValidationMessage = '';
  String _phoneValidationMessage = '';
  String _creditCardValidationMessage = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('String Validator Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _emailController,
              decoration: InputDecoration(
                labelText: 'Email',
                errorText: _emailValidationMessage,
              ),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _urlController,
              decoration: InputDecoration(
                labelText: 'URL',
                errorText: _urlValidationMessage,
              ),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _phoneController,
              decoration: InputDecoration(
                labelText: 'Phone Number',
                errorText: _phoneValidationMessage,
              ),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _creditCardController,
              decoration: InputDecoration(
                labelText: 'Credit Card Number',
                errorText: _creditCardValidationMessage,
              ),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                validateInputs();
              },
              child: Text('Validate'),
            ),
          ],
        ),
      ),
    );
  }

  void validateInputs() {
    setState(() {
      _emailValidationMessage = validateEmail(_emailController.text)
          ? null
          : 'Invalid email address';
      _urlValidationMessage = validateURL(_urlController.text)
          ? null
          : 'Invalid URL';
      _phoneValidationMessage = isPossiblePhoneNumber(_phoneController.text)
          ? null
          : 'Invalid phone number';
      _creditCardValidationMessage = isValidCreditCard(_creditCardController.text)
          ? null
          : 'Invalid credit card number';
    });
  }

  bool validateEmail(String email) {
    return isEmail(email);
  }

  bool validateURL(String url) {
    return isValidURL(url);
  }

  bool isPossiblePhoneNumber(String phone) {
    return isPhoneNumber(phone);
  }

  bool isValidCreditCard(String creditCard) {
    return isValidCardNumber(creditCard);
  }
}

在这个示例中,我们创建了一个简单的Flutter应用程序,包含四个TextField用于输入电子邮件、URL、电话号码和信用卡号。每个TextField都有一个错误文本字段,用于显示验证结果。点击“Validate”按钮时,将调用validateInputs方法,该方法使用string_validator插件中的函数来验证输入字符串,并更新相应的错误消息。

注意,这个示例使用了string_validator插件的以下函数:

  • isEmail(String email): 验证电子邮件地址。
  • isValidURL(String url): 验证URL。
  • isPhoneNumber(String phone): 验证电话号码(这是一个简单的检查,可能需要根据具体需求调整)。
  • isValidCardNumber(String cardNumber): 验证信用卡号。

希望这个示例能帮助你理解如何在Flutter中使用string_validator插件进行字符串验证。

回到顶部