2013-08-02 7 views
24

मेरे पास उपयोगकर्ताओं (उपयोगकर्ताशेमा) के लिए एक मोंगोस स्कीमा है और मैं यह सत्यापित करना चाहता हूं कि ईमेल का सही वाक्यविन्यास है या नहीं।मोंगोस - ईमेल सिंटैक्स मान्य करें

UserSchema.path('email').validate(function (email) { 
    return email.length 
}, 'The e-mail field cannot be empty.') 

हालांकि, यह केवल चेक के मैदान खाली है या नहीं, और वाक्य रचना के लिए नहीं है अगर: मान्यता है कि मैं इस समय का उपयोग इस प्रकार है।

क्या कुछ पहले से मौजूद है कि मैं फिर से उपयोग कर सकता हूं या मुझे अपनी विधि के साथ आना होगा और वैध कार्य के अंदर कॉल करना होगा?

उत्तर

13

आप रेगेक्स का उपयोग कर सकते हैं। इस प्रश्न पर एक नज़र डालें: Validate email address in JavaScript?

मैंने इसे अतीत में उपयोग किया है।

UserSchema.path('email').validate(function (email) { 
    var emailRegex = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailRegex.test(email.text); // Assuming email has a text attribute 
}, 'The e-mail field cannot be empty.') 
+0

अद्भुत बनाने के लिए isAsync सेट! मुझे परीक्षण() विधि के बारे में भी पता नहीं था। – Tamas

+2

बेहतर प्रदर्शन के लिए आपको फ़ंक्शन के बाहर रेगेक्स को परिभाषित करना चाहिए। – Killah

+3

यह रेगेक्स कुछ मान्य ईमेल मान्य करने में विफल रहता है, जैसे कि लेफ्टथैंड पक्ष पर प्लस साइन शामिल हैं। –

55

आप भी सत्यापन के लिए मैच या सत्यापित करें संपत्ति स्कीमा में इस्तेमाल कर सकते हैं

उदाहरण

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

अच्छा समाधान। लेकिन केवल समस्या यह है कि यह एस्लिंट रेगेक्स नियम पारित नहीं कर रहा है। क्या आप अपडेट कर सकते हैं? – blackiii

+4

'मान्य' और 'मिलान' के बीच क्या अंतर है? ईएस 5 के लिए – Anatoly

37

मैं अपने इनपुट स्वच्छता के लिए validator उपयोग करें, और यह हो सकता है एक बहुत अच्छा तरीका में प्रयोग किया जाता है।

यह स्थापित करें, और उसके बाद तो की तरह उपयोग:

import { isEmail } from 'validator'; 
// ... 

const EmailSchema = new Schema({ 
    email: { 
     //... other setup 
     validate: [ isEmail, 'invalid email' ] 
    } 
}); 

इलाज काम करता है, और अच्छी तरह से पढ़ता है।

+0

:), कॉन्स वैधकर्ता = आवश्यकता ('सत्यापनकर्ता'); मान्य करें: [validator.isEmail, 'अवैध ईमेल'], –

+1

'const' दुर्भाग्य से ES5 में उपलब्ध नहीं था। –

+0

आह क्षमा करें मैं "var" में संपादित करने के लिए याद कर रहा था :) –

0

मैंने बनाया, जो ईमेल सत्यापन के साथ एक कस्टम फ़ील्ड-प्रकार को परिभाषित करता है।

3

किसी कारण से 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. 
} 

लेकिन नेवला 4.x (यह पुराने संस्करणों के लिए भी काम कर सकते हैं) अन्य वैकल्पिक विकल्प जो ईकाई परीक्षण के साथ हाथ में हाथ काम है।

एकल सत्यापनकर्ता:

email: { 
    type: String, 
    validate: { 
    validator: function(value) { 
     return value === '[email protected]'; 
    }, 
    message: 'Invalid email.', 
    }, 
}, 

एकाधिक प्रमाणकों:

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.' }, 
    ], 
}, 

इसकी पुष्टि करने के लिए:

मेरे सिफारिश: विशेषज्ञों के कि छोड़ दो, जो निवेश किया है सैकड़ों निर्माण में घंटों का उचित सत्यापन उपकरण में आईएनजी।(पहले से ही रूप में अच्छी तरह here में उत्तर)

npm install --save-dev validator

import { isEmail } from 'validator'; 
... 
validate: { validator: isEmail , message: 'Invalid email.' } 
2

validator dosn't खेलने अच्छी तरह से नेवला साथ चेतावनी से छुटकारा पाने के झूठे

const validator = require('validator'); 

email:{ 
type:String, 
validate:{ 
     validator: validator.isEmail, 
     message: '{VALUE} is not a valid email', 
     isAsync: false 
    } 
} 
संबंधित मुद्दे