使用regEx进行表单验证无法一{而就

时间:2019-07-14 12:36:38

标签: flutter flutter-layout

我正在登录屏幕上,我不想为此做基本的regEx。

我正在使用BeautyTextField中的自定义UI元素库

这是我的电子邮件和密码输入小部件

  Widget emailInput(){
    return BeautyTextfield(
                validator: (value)=>RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email)?"Enter Valid Email":null,
                decoration: InputDecoration(labelText:"Email"),
                cornerRadius: BorderRadius.all(Radius.circular(50)),
                width: double.maxFinite,
                height: 50,
                duration: Duration(milliseconds: 300),
                inputType: TextInputType.emailAddress,
                keyboardType: TextInputType.emailAddress,
                prefixIcon: Icon(Icons.alternate_email),
                placeholder: "Email",
                onSaved: (value)=> email = value,
                fontFamily: "Muli",
            ); }

Widget passwordInput(){
    return BeautyTextfield( 
                    validator: (value)=> value.length == 6 ? "Enter Password of 6 Numbers":null,
                    cornerRadius: BorderRadius.all(Radius.circular(50)),
                    width: double.maxFinite,
                    height: 50,
                    duration: Duration(milliseconds: 300),
                    inputType: TextInputType.text,
                    prefixIcon: Icon(Icons.lock_outline),
                    obscureText: true,
                    placeholder: "Password",
                    onSaved: (value)=> password = value,

                );           
  }

和我的表单小部件:

Widget build(BuildContext context) {
// Build a Form widget using the _formKey created above.
return Form(
  /////////////////////////////////////////////////////////////
  /// Form Body

  key: signINformKey,
  child: 
    Column(
      children: <Widget>[
        emailInput(),
        passwordInput(),
        submitButton(),
        signUpButton(),
      ],
    ),

);}

如果数据与regEx匹配,我将在按下登录按钮时使用此功能,因此它将重定向到另一个页面,否则它将显示一条带有“ Login Error”消息的小吃店,但是它不起作用并且每次我单击登录按钮时,即使regEx不匹配,也会重定向到另一页,因为signINformKey.currentState.validate()始终返回true

2 个答案:

答案 0 :(得分:1)

实际上,如果字符串满足正则表达式,则hasMatch()函数将返回true。您为validator使用的代码始终返回null,因为电子邮件字符串与正则表达式不匹配,这就是为什么您直接转到下一页而不显示Snackbar的原因。您可以在正则表达式之前添加!,因为这会反转结果。

代码:

validator: !RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email)?"Enter Valid Email":null

答案 1 :(得分:0)

使用onChange将输入字段中的值分配给变量并检查这些变量