Line data Source code
1 : import 'package:flutter/services.dart'; 2 : import 'package:folly_fields/util/mask_text_input_formatter.dart'; 3 : import 'package:folly_fields/validators/abstract_validator.dart'; 4 : 5 : /// 6 : /// 7 : /// 8 : class LicencePlateValidator extends AbstractValidator<String> { 9 : /// 10 : /// 11 : /// 12 1 : LicencePlateValidator() 13 1 : : super( 14 1 : <TextInputFormatter>[ 15 1 : UppercaseMask( 16 : mask: 'AAA-9##9', 17 1 : filter: <String, RegExp>{ 18 1 : 'A': RegExp('[a-zA-Z]'), 19 1 : '9': RegExp('[0-9]'), 20 1 : '#': RegExp('[a-zA-Z0-9]'), 21 : }, 22 : ), 23 : ], 24 : ); 25 : 26 : /// 27 : /// 28 : /// 29 1 : @override 30 2 : String format(String value) => strip(value).replaceAllMapped( 31 1 : RegExp(r'^([A-Z]{3})([0-9])([A-Z0-9]{2})([0-9])$'), 32 6 : (Match m) => '${m[1]}-${m[2]}${m[3]}${m[4]}', 33 : ); 34 : 35 : /// 36 : /// 37 : /// 38 1 : @override 39 2 : String strip(String value) => value.replaceAll(RegExp('[^A-Z0-9]'), ''); 40 : 41 : /// 42 : /// 43 : /// 44 1 : @override 45 : bool isValid(String value) { 46 1 : if (value.isEmpty) { 47 : return false; 48 : } 49 : 50 1 : value = strip(value); 51 : 52 2 : if (value.length != 7) { 53 : return false; 54 : } 55 : 56 3 : return format(value).length == 8; 57 : } 58 : }