Flutter:如何避免验证器中的特殊字符

时间:2018-10-16 12:26:31

标签: validation dart flutter special-characters

我具有此验证功能:

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

我想指出不必包含特殊字符,但是我怎么说呢?

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式检查字符串是否为字母数字。

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

答案 1 :(得分:1)

这是一个较为笼统的答案。

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'));
}