ইমেল ঠিকানা বৈধতা ASP.NET এমভিসি ডেটা টাইপ বৈশিষ্ট্য ব্যবহার করে


163

ইমেলের বৈধতা নিয়ে আমার কিছু সমস্যা আছে।

আমার মডেলটিতে:

[Required(ErrorMessage = "Field can't be empty")]
[DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")]
public string ReceiverMail { get; set; }

আমার দৃষ্টিতে:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br />
@Html.ValidationMessageFor(m => m.ReceiverMail)

আপনি ক্ষেত্রটি খালি রেখে দিলে এখন এটি আমাকে সঠিকভাবে "ক্ষেত্রটি খালি রাখতে পারে না" দেখাচ্ছে। তবে আপনি যখন কোনও অবৈধ ইমেল ঠিকানা পূরণ করেন: "fwenrjfw" তখন ফর্মটি "ই-মেইলটি বৈধ নয়" বলে না।

ইমেল ঠিকানা হিসাবে ইনপুটটি বৈধতা দেওয়ার জন্য আমি কীভাবে ফর্মটি পেতে পারি? আমি এটি দিয়ে কিছু সাহায্যের সন্ধান করছি।

উত্তর:


327

আপনি .NET ফ্রেমওয়ার্ক 4.5 ব্যবহার করে থাকেন, সমাধান ব্যবহার করা EmailAddressAttributeহয় যা ভিতরে থাকা System.ComponentModel.DataAnnotations

আপনার কোডটি দেখতে এর মতো দেখতে পাওয়া উচিত:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

আপনাকে ধন্যবাদ @ শিট্টু ওলুগবেঙ্গা! তবে কেন এটি কাজ করে না তা আমি বুঝতে পারি না:[DataType(DataType.EmailAddress, ErrorMessage = "Error message.")]
ওয়েলিংটন জেনেলি

15
@ ওয়েলিংটন জেনেলি - ডেটাটাইপ (ডেটাটাইপ.ইমেলএড্রেস) ব্যবহারকারীর ইনপুটকে বৈধতা দিতে ব্যবহার করা যাবে না। এটি কেবল প্রদর্শন / সম্পাদক টেম্পলেটগুলি ব্যবহার করে মানগুলি সরবরাহ করার জন্য একটি ইউআই ইঙ্গিত সরবরাহ করতে ব্যবহৃত হয়।
লিয়াম

3
@ জনি DataType.EmailAddressবৈধতা সম্পর্কে নয়। এটি ডেটা উপস্থাপনা সম্পর্কে ...
সেবাস্তিয়ান জাওরি উইনিওইইকি

3
আমার একই সমস্যা আছে এবং আমার জন্য ইমেল বৈধতা 'নাম @ এক্সএক্সএক্সএক্স' এর মতো ইমেলগুলি ব্যতীত কাজ করে। এটা কি আর কেউ দেখেছে?
ক্রেমেনা লালোভা

3
@ ক্রেইমেনালালোভা name@xxxসম্পূর্ণ বৈধ ইমেল ঠিকানা, সুতরাং সেই পদ্ধতিতে কোনও ভুল নেই। উদাহরণ username@localhostহিসাবে উদাহরণ বিবেচনা করুন ।
জন বার্গম্যান

39

ব্যবহার করে দেখুন Html.EditorForপরিবর্তে সাহায্যকারী পদ্ধতি Html.TextBoxFor


1
এটি সঠিক উত্তর কারণ এটি আপনার মডেলটিতে ইতিমধ্যে যুক্ত করা ডেটা ধরণ এবং ত্রুটি ব্যবহার করবে।
রিকার্ডো সানচেজ

4
এই পদ্ধতি ডোমেইন TLD জন্য চেক না, তাই কেউ @ যাই হোক না কেন Myname রাখা এবং ছেড়ে .com পারে এবং এটি সঠিকভাবে যাচাই করবে
JasonH

8
আমার নাম @ যা কিছু বৈধ ইমেল ঠিকানা
michaelmsm89

এমভিসি 4 এর জন্য নিখুঁতভাবে কাজ করেছেন Thank আপনাকে ধন্যবাদ।
হোসে গোমেজ

এইচটিএমএল এর ভিতরে কী লিখবেন? ইমেল যাচাই করার জন্য?
নীরজ কুমার

28

আপনার নিয়মিত এক্সপ্রেশন অ্যাট্রিবিউট ব্যবহার করা দরকার, এরকম কিছু:

[RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]

এবং [প্রয়োজনীয়] মুছবেন না কারণ [নিয়মিত এক্সপ্রেশন] খালি ক্ষেত্রগুলিকে প্রভাবিত করে না।


8
ওল্ড স্কুলটি দুর্দান্ত তবে মাইক্রোসফ্ট একটি বৈশিষ্ট্য কার্যকর করেছে যেহেতু এটি কিছু বাগ, দেশ, সময় অঞ্চল বা গ্রহগুলিতে ঘটতে পারে এমন বাগ এবং তদারকিগুলিকে সম্বোধন করে। কাস্টম রেজেক্সের চেয়ে সম্পূর্ণ প্রকাশিত কোড বেস ব্যবহার করা ভাল। উদাহরণস্বরূপ, আপনার রেগেক্স কী নতুন শীর্ষ স্তরের ডোমেনগুলি বিবেচনা করে?
পাইওটার কুলা

2
এই রেজেক্সটি দেখে মনে হচ্ছে এটি বিদেশী অক্ষর বা এতে অনেকগুলি মানহীন অক্ষরের কোনও ইমেল ঠিকানার জন্য ব্যর্থ হবে।
এরিকপি

2
রেইগেক্সের সাথে ইমেল ঠিকানাগুলিকে বৈধ করা সাধারণত একটি ভয়ংকর ধারণা ... তবে আপনার যদি অবশ্যই এটির
ইমেল

9
এই রেজেক্স এবং ওয়েবসাইটটি ভুল। নতুন টিএলডি প্রচুর পরিমাণে 6 টির বেশি অক্ষর রয়েছে। এটিকে অনুসরণ করবেন না।
jsgoupil

14

যদি আপনি এখনও। নেট 4.5 ব্যবহার না করেন:

/// <summary>
/// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY.
/// </summary>
public class EmailAnnotation : RegularExpressionAttribute
{
    static EmailAnnotation()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter));
    }

    /// <summary>
    /// from: http://stackoverflow.com/a/6893571/984463
    /// </summary>
    public EmailAnnotation()
        : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
            + "@"
            + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { }

    public override string FormatErrorMessage(string name)
    {
        return "E-mail is not valid";
    }
}

তারপরে আপনি এটি করতে পারেন:

    public class ContactEmailAddressDto
    {
        public int ContactId { get; set; }
        [Required]
        [Display(Name = "New Email Address")]
        [EmailAnnotation] //**<----- Nifty.**
        public string EmailAddressToAdd { get; set; }
    }

1
আমি স্ট্যাটিক কনস্ট্রাক্টর পছন্দ করি।
ব্রায়ান সুইনি

1
@ ব্রায়ানসুইন, আমি এর জন্য কৃতিত্ব নিতে পারি না: পি। তবুও আরও কয়েকটা বছর আগে আমি এখান থেকে এসেছি।
এমসিফিয়া

10

আমি এমভিসি ৩ ব্যবহার করি my আমার ক্লাসগুলির একটিতে ইমেল ঠিকানা সম্পত্তির একটি উদাহরণ:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[Email(ErrorMessage = "The email address is not valid")]
public string Email { get; set; }

Requiredযদি ইনপুটটি isচ্ছিক হয় তবে সরান । নিয়মিত প্রকাশের দরকার নেই যদিও আমার কাছে এমন একটি রয়েছে যা আরএফসি 2822 স্তর পর্যন্ত ইমেল ঠিকানার মধ্যে সমস্ত অপশন কভার করে (এটি খুব দীর্ঘ)।


3
আপনার ইমেল বৈশিষ্ট্যটি কোন নেমস্পেসে রয়েছে? বা এটি একটি কাস্টম বৈশিষ্ট্য?
ব্যবহারকারী

5
এমভিসি 4 ব্যবহার করে [EmailAddress]এবং আপনার থাকা দরকারusing System.ComponentModel.DataAnnotations;
পাইটর কুলা

1
মনে হবে যে কোন ব্যাপার আমি কি, হয় ব্যবহার Emailবা RegularExpressionক্ষেত্র প্রয়োজন বোধ করা তোলে। Requiredটীকা মুছে ফেলার কোনও প্রভাব নেই। RegularExpressionবৈধতা সহ ক্ষেত্রগুলি খালি ক্ষেত্রগুলি গ্রহণ করতে কী করতে হবে সে সম্পর্কে কোনও পরামর্শ ?
এরিক কে

@ কোয়ান্টামডাইনামিক্স বিকল্প হিসাবে আপনার নিয়মিত অভিব্যক্তিতে একটি খালি স্ট্রিং পরীক্ষা যুক্ত করার চেষ্টা করুন। কখনও চেষ্টা করে দেখেনি, তবে কে জানে?
পিটার স্মিথ


4

এমভিসি 5 প্রকল্পে উপরের কোডটি ব্যবহার করেছেন এবং এটি বৈধতা ত্রুটির সাথে সম্পূর্ণ সূক্ষ্মভাবে কাজ করে ust কেবল এই কোডটি চেষ্টা করুন

   [Required]
   [Display(Name = "Email")]
   [EmailAddress]

   [RegularExpression(@"^([A-Za-z0-9][^'!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ][a-zA-z0- 
    9-._][^!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ]*\@[a-zA-Z0-9][^!&@\\#*$%^?<> 
        ()+=':;~`.\[\]{}|/,₹€ ]*\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a 
   valid Email")]


   public string ReceiverMail { get; set; }

1
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। কেবলমাত্র কোডের উত্তরগুলি একটি ভাল অনুশীলন হিসাবে বিবেচিত হয় না। এটি কী করে এবং কীভাবে সমস্যাটি সমাধান করে তা দয়া করে বিশদ দিন।
কুইনজ

0

স্ক্রিপ্টগুলি সাধারণত এইচটিএমএল পৃষ্ঠার শেষের দিকে লোড করা হয় এবং এমভিসি বান্ডিলগুলি ব্যবহারের পরামর্শ দিয়েছিল, কেবলমাত্র। সুতরাং আমার সেরা বেট হ'ল আপনার jquery.validateফাইলগুলি কোনওভাবে পরিবর্তিত হয়েছে বা সর্বশেষ সংস্করণে আপডেট হয় না, যেহেতু তারা ই-মেইল ইনপুটগুলিকে বৈধ করে।

সুতরাং আপনি নিজের নুগেট প্যাকেজটিকে আপডেট / রিফ্রেশ করতে পারেন বা আপনার নিজের ফাংশনটি সত্যিই লিখতে পারেন।

এখানে একটি উদাহরণ দেওয়া হয়েছে যা পরে আপনি একটি অতিরিক্ত ফাইল যুক্ত করবেন jquery.validate.unobtrusive:

$.validator.addMethod(
    "email",
    function (value, element) {
        return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
    },
    "This e-mail is not valid"
);

এটি কেবলমাত্র বর্তমান jquery.validateরেজেক্সের একটি অনুলিপি এবং পেস্ট , তবে এইভাবে আপনি আপনার কাস্টম ত্রুটি বার্তা সেট করতে পারবেন / নিকট ভবিষ্যতে আপনি যে ক্ষেত্রগুলিকে বৈধতা দিতে চান তার জন্য অতিরিক্ত পদ্ধতি যুক্ত করতে পারেন।


0

উপরের হিসাবে এটি কোনও ইমেল ঠিকানার সার্ভার পার্শ্বের বৈধতা ঠিক করবে:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

যাহোক...

আপনি যদি জ্যাকুয়ারি ক্লায়েন্ট সাইডের বৈধতা ব্যবহার করছেন তবে আপনার জানা উচিত যে ইমেলটি ক্লায়েন্ট সাইডের (জ্যাকুয়ের বৈধতা) আলাদাভাবে সার্ভার সাইড (মডেল বৈধকরণ) বৈধ করে। সেই পরীক্ষায় @ উদাহরণে (একটি শীর্ষ স্তরের ডোমেন ইমেল ঠিকানা) সার্ভারের দিক থেকে ব্যর্থ হবে তবে ক্লায়েন্টের পক্ষে জরিমানাটি বৈধ করবে।

এই বৈষম্য ঠিক করতে আপনি ডিফল্ট ক্লায়েন্টের পাশের ইমেল বৈধতাটিকে নিম্নরূপে ওভাররাইড করতে পারেন:

$.validator.methods.email = function (value, element) {
    return this.optional(element) || /[a-z]+@[a-z]+\.[a-z]+/.test(value);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.