Solución:
Debe utilizar la expresión regular para validar la estructura.
bool validateStructure(String value){
String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[[email protected]#$&*~]).{8,}$';
RegExp regExp = new RegExp(pattern);
return regExp.hasMatch(value);
}
output:
Vignesh123! : true
vignesh123 : false
VIGNESH123! : false
[email protected] : false
12345678? : false
Esta función validará que el valor pasado tenga la estructura o no.
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
}
Tu expresión regular debería verse así:
r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[[email protected]#$&*~]).{8,}$
Aquí hay una explicación:
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
(?=.*?[[email protected]#$&*~]).{8,} // should contain at least one Special character
$
Haga coincidir la expresión anterior con la cadena de su contraseña.
String validatePassword(String value) {
Pattern pattern =
r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[[email protected]#$&*~]).{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;
}
}
Puede lograr esto usando el siguiente complemento de flutter.
wc_form_validators
Puedes usarlo de esta manera:
TextFormField(
decoration: InputDecoration(
labelText: 'Password',
),
validator: Validators.compose([
Validators.required('Password is required'),
Validators.patternString(r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[[email protected]#$&*~]).{8,}$', 'Invalid Password')
]),
),
Su documentación es realmente buena. Puede leerlo para obtener más funciones útiles como esta.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)