如何在Flutter中使用密码处理TextField验证

时间:2019-05-22 09:39:34

标签: dart flutter

我创建了一个登录页面,我需要将这些内容添加到我的密码中。如何带有验证警报消息?

  • 最少1个大写字母
  • 最少1个小写字母
  • 最少1个数字
  • 至少1个特殊字符
  • 通用允许字符(!@#$&*〜)

6 个答案:

答案 0 :(得分:2)

您需要使用正则表达式来验证结构。

 bool validateStructure(String value){
        String  pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$';
        RegExp regExp = new RegExp(pattern);
        return regExp.hasMatch(value);
  }

output: 

    Vignesh123! : true
    vignesh123 : false
    VIGNESH123! : false
    vignesh@ : false
    12345678? : false

此函数将验证传递的值是否具有结构。

    var _usernameController = TextEditingController();
    String _usernameError;

    ...

    @override
    Widget build(BuildContext context) {
        return
        ...
        TextFormField(
          controller: _usernameController,
          decoration: InputDecoration(
              hintText: "Username", errorText: _usernameError),
          style: TextStyle(fontSize: 18.0),
        ),
        Container(
          width: double.infinity,
          height: 50.0,
          child: RaisedButton(
            onPressed: validate,
            child: Text(
              "Login",
              style: TextStyle(color: Colors.white),
            ),
            color: Theme.of(context).primaryColor,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(50.0),
            ),
          ),
        ),
        ...
    }

    ...

    validate(){
        if(!validateStructure(_usernameController.text)){
            setState(() {
                _usernameError = emailError;
                _passwordError = passwordError;
            });
            // show dialog/snackbar to get user attention.
            return;
        }
        // Continue 
    }

答案 1 :(得分:1)

您必须将TextFormField小部件与validator属性一起使用。

TextFormField(
   validator: (value) {
      // add your custom validation here.
      if (value.isEmpty) {
        return 'Please enter some text';
      }
      if (value.length < 3) {
        return 'Must be more than 2 charater';
      }
   },
),

看看官方文档:https://flutter.dev/docs/cookbook/forms/validation

答案 2 :(得分:1)

您的正则表达式应如下所示:

r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$

这里是一个解释:

r'^
  (?=.*[A-Z])       // should contain at least one upper case
  (?=.*[a-z])       // should contain at least one lower case
  (?=.*?[0-9])          // should contain at least one digit
 (?=.*?[!@#\$&*~]).{8,}  // should contain at least one Special character
$

将上述表达式与您的密码字符串匹配。使用此方法-

String validatePassword(String value) {
    Pattern pattern =
        r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$';
    RegExp regex = new RegExp(pattern);
    print(value);
    if (value.isEmpty) {
      return 'Please enter password';
    } else {
      if (!regex.hasMatch(value))
        return 'Enter valid password';
      else
        return null;
    }
  }

答案 3 :(得分:1)

您可以使用以下flutter插件来实现此目的。

wc_form_validators

您可以这样使用它:

hr.employee_category_2

其文档非常好。您可以阅读它以获取更多类似这样的util函数。

答案 4 :(得分:0)

这是完整答案

  

编写Dart程序以检查字符串是否为有效密码。一种。密码必须至少包含十个字符。 b。密码   仅由字母和数字组成。 C。密码必须包含   至少两位数。

import 'dart:io';

main() {
  var password;
  stdout.write("Enter You'r Password: ");
  password=stdin.readLineSync();

   if(password.length>=10 && !password.contains(RegExp(r'\W')) && RegExp(r'\d+\w*\d+').hasMatch(password))
   {
     print(" \n\t$password is Valid Password");
   }
   else
   {
     print("\n\t$password is Invalid Password");

   }

答案 5 :(得分:0)

this is the best regx

bool passValid = RegExp("^(?=.{8,32}\$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#\$%^&*(),.?:{}|<>]).*").hasMatch(value);
 
if (value.isEmpty ||!passValid) 
 {
 return 'error';
 }