Флаттер: как избежать специальных символов в валидаторе - PullRequest
0 голосов
/ 16 октября 2018

У меня есть эта функция проверки:

class FormFieldValidator{
  static String validate(String value, String message){
    return (value.isEmpty || (value.contains(**SPECIAL CHARACTERS**))) ? message : null;
  }
}

Я хотел бы указать, что не должен содержать специальные символы, но как я могу это сказать?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Вот несколько более общий ответ.

1.Определите допустимые символы

Добавьте нужные символы в квадратных скобках [ ].(Вы можете добавить диапазон символов, используя - тире.):

// alphanumeric
static final  validCharacters = RegExp(r'^[a-zA-Z0-9]+$');

Приведенное выше регулярное выражение соответствует прописным и строчным буквам и цифрам.Если вам нужны другие персонажи, вы можете добавить их.Например, следующее регулярное выражение также соответствует &, % и =.

// alphanumeric and &%=
static final validCharacters = RegExp(r'^[a-zA-Z0-9&%=]+$');

Экранирующие символы

Некоторые символы имеют специальное значение в регулярном выражении и должны бытьс обратной косой чертой \:

  • (, ), [, ], {, }, *, +, ?, ., ^, $, | и \.

Так что, если ваши требования состоят из буквенно-цифровых символов и _-=@,.;, тогда регулярное выражение будет:

// alphanumeric and _-=@,.;
static final validCharacters = RegExp(r'^[a-zA-Z0-9_\-=@,\.;]+$');

- и . сбежали.

2.Проверьте строку

validCharacters.hasMatch('abc123');  // true
validCharacters.hasMatch('abc 123'); // false (spaces not allowed)

Попробуйте сами в DartPad

void main() {
  final validCharacters = RegExp(r'^[a-zA-Z0-9_\-=@,\.;]+$');
  print(validCharacters.hasMatch('abc123'));
}
0 голосов
/ 16 октября 2018

Вы можете использовать регулярное выражение, чтобы проверить, является ли строка буквенно-цифровой.

class FormFieldValidator {
  static String validate(String value, String message) {
    return RegExp(r"^[a-zA-Z0-9]+$").hasMatch(value) ? null : message;
  }
}
...