Mangosta-validar sintaxis de correo electrónico
Tengo un esquema de mangosta para usuarios (UserSchema) y me gustaría validar si el correo electrónico tiene la sintaxis correcta. La validación que uso actualmente es la siguiente:
UserSchema.path('email').validate(function (email) {
return email.length
}, 'The e-mail field cannot be empty.')
Sin embargo, esto solo comprueba si el campo está vacío o no, y no para la sintaxis.
¿Ya existe algo que pueda reutilizar o tendría que idear mi propio método y llamarlo dentro de la función validate?
6 answers
Puede usar una expresión regular. Echa un vistazo a esta pregunta: ¿Validar la dirección de correo electrónico en JavaScript?
He usado esto en el pasado.
UserSchema.path('email').validate(function (email) {
var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return emailRegex.test(email.text); // Assuming email has a text attribute
}, 'The e-mail field cannot be empty.')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:02
También puede usar la propiedad match o la propiedad validate para la validación en el esquema
Ejemplo
var validateEmail = function(email) {
var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return re.test(email)
};
var EmailSchema = new Schema({
email: {
type: String,
trim: true,
lowercase: true,
unique: true,
required: 'Email address is required',
validate: [validateEmail, 'Please fill a valid email address'],
match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please fill a valid email address']
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-22 17:12:43
Utilizo validador para mi saneamiento de entrada, y se puede utilizar de una manera bastante genial.
Instálalo, y luego úsalo así:
import { isEmail } from 'validator';
// ...
const EmailSchema = new Schema({
email: {
//... other setup
validate: [ isEmail, 'invalid email' ]
}
});
Funciona muy bien, y se lee muy bien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 21:36:15
El validador dosn't juega bien con mangosta para deshacerse del conjunto de advertencia IsAsync a false
const validator = require('validator');
email:{
type:String,
validate:{
validator: validator.isEmail,
message: '{VALUE} is not a valid email',
isAsync: false
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-26 16:26:53
Por alguna razón no funciona bien con las pruebas validate: [ isEmail, 'Invalid email.']
validate()
.
const user = new User({ email: 'invalid' });
try {
const isValid = await user.validate();
} catch(error) {
expect(error.errors.email).to.exist; // ... it never gets to that point.
}
Pero mangosta 4.x (también podría funcionar para versiones anteriores) tiene otras opciones alternativas que funcionan de la mano con las pruebas unitarias.
Validador único:
email: {
type: String,
validate: {
validator: function(value) {
return value === '[email protected]';
},
message: 'Invalid email.',
},
},
Múltiples validadores:
email: {
type: String,
validate: [
{ validator: function(value) { return value === '[email protected]'; }, msg: 'Email is not handsome.' },
{ validator: function(value) { return value === '[email protected]'; }, msg: 'Email is not awesome.' },
],
},
Cómo validar el correo electrónico:
Mi recomendación: Dejar eso a los expertos que han invertido cientos de horas en la construcción adecuada herramientas de validación. (ya contestado en aquí también)
npm install --save-dev validator
import { isEmail } from 'validator';
...
validate: { validator: isEmail , message: 'Invalid email.' }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:10
Tipo de correo electrónico para esquemas - mangosta-tipo-correo electrónico
var mongoose = require('mongoose');
require('mongoose-type-email');
var UserSchema = new mongoose.Schema({
email: mongoose.SchemaTypes.Email
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-09 16:02:57