কীভাবে পিএইচপি-তে কোনও ইমেল ঠিকানা যাচাই করা যায়


218

ইমেল ঠিকানাগুলি যাচাই করার জন্য আমার এই ফাংশনটি রয়েছে:

function validateEMAIL($EMAIL) {
    $v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";

    return (bool)preg_match($v, $EMAIL);
}

ইমেল ঠিকানাটি বৈধ কিনা তা যাচাই করার জন্য এটি কি ঠিক আছে?


1
যদি এটি কাজ করে তবে এটি কাজ করে। আপনি আসলেই এটি আরও ভাল করতে পারবেন না, এটি খুব ছোট। কেবল ভাল জিনিসটি স্টাইল নয়। validateEmailকেরেট হবে, পাশাপাশি পাশ করাও হবে $emailনা $EMAIL
স্ট্যান

শুধু নিশ্চিত আমি কোড আছে যে সব :) যে কোন বড় সমস্যা ছিল না করতে চেয়েছিলেন
ক্যামেরন

ইমেল ঠিকানাগুলি যাচাই করতে নিয়মিত এক্সপ্রেশন কীভাবে এবং কীভাবে ব্যবহার করবেন না সে সম্পর্কে আরও জানতে স্ট্যাকওভারফ্লো.com/ প্রশ্নস / ২০১৩৩৩/২ দেখুন ।
লেগোস্কিয়া

5
এটি অনেকগুলি বৈধ ইমেল ঠিকানা যাচাই করতে ব্যর্থ হবে। উদাহরণস্বরূপ *@example.com বা'@example.com বা আমি @ [127.0.0.1] বা আপনি @ [আইপিভি 6: 08 বি 0: 1123: এএএএ :: 1234]
জ্যাকোডার

7
@ জ্যাকোডার, এমন নয় যে আমি সেই রেজেক্সের পরামর্শ দিচ্ছি, তবে আমরা আশা করতে পারি যে গানগুলি ইত্যাদির জন্য এই জাতীয় ঠিকানা ব্যবহার করা কেউ ব্যর্থ হলে অভিযোগ করবে না :)
হ্যালোল আজগর

উত্তর:


568

কোনও ইমেল ঠিকানাটি সুগঠিত কিনা তা যাচাই করার সহজ ও নিরাপদ উপায় হল filter_var()ফাংশনটি ব্যবহার করা :

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // invalid emailaddress
}

অতিরিক্তভাবে আপনি পরীক্ষা করতে পারেন যে ডোমেনটি একটি MXরেকর্ড সংজ্ঞায়িত করেছে :

if (!checkdnsrr($domain, 'MX')) {
    // domain is not valid
}

তবে এটি এখনও গ্যারান্টি দেয় না যে মেলটি বিদ্যমান। এটির সন্ধানের একমাত্র উপায় হ'ল একটি নিশ্চিতকরণ মেল পাঠানো।


এখন আপনি যদি আপনার সহজ উত্তরটি ইমেল ঠিকানার বৈধতা সম্পর্কে নির্দ্বিধায় পড়েন তবে আপনি যদি শিখতে আগ্রহী হন বা অন্যথায় কেবল দ্রুত উত্তরটি ব্যবহার করেন এবং এগিয়ে যান। কঠোরানুভুতি নেই.

একটি রেগেক্স ব্যবহার করে কোনও ইমেল ঠিকানা বৈধ করার চেষ্টা করা একটি "অসম্ভব" কাজ। আমি যতদূর যেতে চাই যে আপনি তৈরি করেছেন রেজিএক্স অকেজো। ইমেল ঠিকানা সম্পর্কে তিনটি আরএফসি রয়েছে এবং ভুল ইমেল ঠিকানাগুলিকে ধরার জন্য একটি রেজেেক্স লিখতে হয় এবং একই সাথে মিথ্যা ধনাত্মকতা থাকে না যা নশ্বর কিছু করতে পারে না। পিএইচপি এর ফাংশন দ্বারা ব্যবহৃত রেজেক্সের পরীক্ষার জন্য (ব্যর্থ এবং সফল উভয়) এই তালিকাটি দেখুন Checkfilter_var()

এমনকি বিল্ট-ইন পিএইচপি ফাংশন, ইমেল ক্লায়েন্ট বা সার্ভারগুলি এটি সঠিকভাবে পায় না। এখনও বেশিরভাগ ক্ষেত্রেই filter_varসেরা বিকল্প।

আপনি যদি জানতে চান যে পিএইচপি (বর্তমানে) কোন রেজেক্স প্যাটার্নটি ইমেল ঠিকানাগুলি যাচাই করতে ব্যবহার করে পিএইচপি উত্সটি দেখুন

আপনি যদি ইমেল ঠিকানাগুলি সম্পর্কে আরও জানতে চান তবে আমি আপনাকে চশমা পড়া শুরু করার পরামর্শ দিই, তবে আপনাকে সতর্ক করতে হবে এটি কোনও প্রসারিত দ্বারা পড়া সহজ নয়:

  • rfc5322
  • rfc5321
  • rfc3696
  • rfc6531 (ইউনিকোড অক্ষর অনুমতি দেয়, যদিও অনেক ক্লায়েন্ট / সার্ভার এটি গ্রহণ করে না)

নোট যেটি filter_var()ইতিমধ্যে কেবলমাত্র পিএইচপি 5.2 হিসাবে উপলব্ধ রয়েছে stated আপনি যদি পিএইচপি এর পূর্ববর্তী সংস্করণগুলির সাথে এটি কাজ করতে চান তবে আপনি পিএইচপি-তে ব্যবহৃত রেজেক্স ব্যবহার করতে পারেন:

<?php

$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';

$emailaddress = 'test@gmail.com';

if (preg_match($pattern, $emailaddress) === 1) {
    // emailaddress is valid
}

পিএস উপরে ব্যবহৃত পিগ্রেস প্যাটার্নের একটি নোট (পিএইচপি উত্স থেকে)। দেখে মনে হচ্ছে মাইকেল রুশনের কিছু কপিরাইট রয়েছে । যেমনটি বলা হয়েছে: "এই কোডটি ব্যবহার করতে এবং পুনরায় বিতরণ করতে নির্দ্বিধায় But তবে দয়া করে এই কপিরাইট বিজ্ঞপ্তিটি রাখুন" "


উত্তম উত্তর, তবে এই লিঙ্কটি অনুসারে: haacked.com/archive/2007/08/21/… স্থানীয়ভাবে ব্যবহারকারীর নাম স্থানীয়ভাবে অংশে উদ্ধৃত করা যেতে পারে, তবে FILTER_VALIDATE_EMAIL এটি গ্রহণ করে না।
ড্যানিয়েল ডি লিয়ন

3
উল্লিখিত হিসাবে এটি সমস্ত ইমেল ঠিকানাগুলির জন্য কাজ করে না । এছাড়াও আমার উত্তরে ব্যর্থ পরীক্ষাগুলির তালিকা দেখুন যে কয়েকটি উদ্ধৃত স্ট্রিং কাজ করে এবং অন্যেরা তা করে না।
PeeHaa

4
নাহ, সেই প্যাটার্ন ইমেলস্টেটারে অনেকগুলি ব্যর্থ পরীক্ষা ..পিয়েরহর্ডিজক.টেস্ট- প্যাটার্ন / এমটিএজে :-)
পিইহাআ

1
আপনার অভ্যন্তরের ইমেলগুলির সাথে বড় টেক্সট স্ট্রিংয়ের উপরে "preg_match_all" এর মতো ফাংশন ব্যবহার করার প্রয়োজন হলে এই প্যাটার্নটি অত্যন্ত জটিল। আপনার কারও যদি সহজ থাকে তবে শেয়ার করুন। আমার অর্থ যদি আপনি চান: preg_match_all ($ প্যাটার্ন, $ টেক্সট_স্ট্রিং, $ ম্যাচ); তাহলে আপনাকে যদি বড় আকারের পাঠ্যকে পার্স করতে হয় তবে এই জটিল প্যাটার্নটি সার্ভারটি ওভারলোড করবে।
ভ্লাদো

4
@ পিএইচএ: পোস্টফিক্স 3.0.০ এখন প্রায় দুই বছর ধরে এটি সমর্থন করে: postfix.org/SMTPUTF8_README.html , এবং এটি উবুন্টু ১ 16.০৪-এ অন্তর্ভুক্ত রয়েছে এবং উদাহরণস্বরূপ পরবর্তী দেবিয়ান রিলিজে এটি অন্তর্ভুক্ত করা হবে। এক্সিমের পরীক্ষামূলক সমর্থন রয়েছে। জিমেইলের মতো ওয়েবমেল সরবরাহকারীরা এই জাতীয় ইমেল প্রেরণ / গ্রহণের জন্য সমর্থন যোগ করেছেন, যদিও আপনি এখনও ইউনিকোড অ্যাকাউন্ট তৈরি করতে পারবেন না। বিস্তৃত ব্যবহার এবং সমর্থন নাগালের মধ্যে রয়েছে এবং filter_varতারা এই মুহূর্তে এটি পরিবর্তন করলেও বেশ কিছু সময়ের পরে পিছিয়ে যাবে (আমি একটি বাগ রিপোর্ট পোস্ট করেছি)।
আইকুইটো 20'16

43

আপনি এর জন্য ফিল্টার_ভার ব্যবহার করতে পারেন ।

<?php
   function validateEmail($email) {
      return filter_var($email, FILTER_VALIDATE_EMAIL);
   }
?>

1
এই ফাংশনটি যুক্ত করা বন্ধ করুন কারণ এটি ডোমেনগুলি বৈধ করে না। আপনি যদি কিছু @ ঠিকানা যুক্ত করে থাকেন তবে এটি বৈধ। এবং এটা না!
হের নেন্টু '11

এক লাইন ফাংশন সমন্বিত সমস্ত এক লাইন ফাংশন সহ কী? আমি সেগুলি সর্বত্র দেখছি। এটি কখন "জিনিস" হয়ে উঠল? (অলঙ্কৃত)। এটি বন্ধ করা প্রয়োজন।
নীল জল

15

আমার অভিজ্ঞতায়, regexসমাধানগুলিতে অনেকগুলি মিথ্যা ইতিবাচক থাকে এবং filter_var()সমাধানগুলিতে মিথ্যা নেগেটিভ থাকে (বিশেষত নতুন টিএলডিগুলির সাথে সমস্ত )।

পরিবর্তে, ঠিকানায় ইমেল ঠিকানার প্রয়োজনীয় সমস্ত অংশ (ব্যবহারকারী, "@" প্রতীক এবং ডোমেন) রয়েছে তা নিশ্চিত করে নেওয়া ভাল, তারপরে ডোমেনটি নিজে থেকেই রয়েছে কিনা তা যাচাই করুন।

কোনও বহিরাগত ডোমেনের জন্য কোনও ইমেল ব্যবহারকারী উপস্থিত থাকলে তা (সার্ভার সাইড) নির্ধারণ করার কোনও উপায় নেই।

এটি একটি পদ্ধতি যা আমি একটি ইউটিলিটি ক্লাসে তৈরি করেছি:

public static function validateEmail($email)
{
    // SET INITIAL RETURN VARIABLES

        $emailIsValid = FALSE;

    // MAKE SURE AN EMPTY STRING WASN'T PASSED

        if (!empty($email))
        {
            // GET EMAIL PARTS

                $domain = ltrim(stristr($email, '@'), '@') . '.';
                $user   = stristr($email, '@', TRUE);

            // VALIDATE EMAIL ADDRESS

                if
                (
                    !empty($user) &&
                    !empty($domain) &&
                    checkdnsrr($domain)
                )
                {$emailIsValid = TRUE;}
        }

    // RETURN RESULT

        return $emailIsValid;
}

কখনওই দাবি করেন না যে তাদের এপিআই 97% ডেলিভারিটিতে বৈধতা দিতে সক্ষম। যতক্ষণ না আপনি অবশ্যই আপনার পরিচিতি ডাটাবেস হস্তান্তর করতে আপত্তি করবেন না।
টম রাসেল

stristrএকাধিক @ চিহ্ন থাকলে ডোমেনটি পেতে ব্যর্থ হবে। আরও ভাল explode('@',$email)এবং এটি যাচাই করা উচিতsizeof($array)==2
অ্যারন গিলিয়ন

@ অ্যারনগিলিয়ন আপনি ডোমেন অংশগুলি পাওয়ার আরও ভাল উপায় হিসাবে সঠিক হলেও, পদ্ধতিটি এখনও মিথ্যা হিসাবে checkdnsrr()প্রত্যাবর্তন করবে যদি ডোমেনে কোনও @ সাইন থাকে।
জাবারি

11

আমার মনে হয় আপনি পিএইচপি-র অন্তর্নির্মিত ফিল্টারগুলি ব্যবহার করে ভাল হতে পারেন - এই বিশেষ ক্ষেত্রে:

এটি পরম সরবরাহ করার সাথে একটি সত্য বা মিথ্যা ফিরিয়ে দিতে পারে FILTER_VALIDATE_EMAIL


9

এটি কেবল আপনার ইমেলকে বৈধতা দেবে না, তবে এটি অপ্রত্যাশিত অক্ষরের জন্য স্যানিটাইজও করবে:

$email  = $_POST['email'];
$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);

if (filter_var($emailB, FILTER_VALIDATE_EMAIL) === false ||
    $emailB != $email
) {
    echo "This email adress isn't valid!";
    exit(0);
}

4

ইমেল যাচাইকরণ সম্পর্কে 'শীর্ষ প্রশ্নে' এর উত্তর https://stackoverflow.com/a/41129750/1848217

আমার জন্য ইমেল চেক করার সঠিক উপায় হ'ল:

  1. @ চিহ্নটি উপস্থিত রয়েছে এবং তার আগে এবং পরে কিছু অ-@ চিহ্ন রয়েছে তা পরীক্ষা করে দেখুন: /^[^@]+@[^@]+$/
  2. কিছু "অ্যাক্টিভেশন কোড" দিয়ে এই ঠিকানায় একটি ইমেল প্রেরণের চেষ্টা করুন।
  3. যখন ব্যবহারকারী তার ইমেল ঠিকানা "সক্রিয়" করে, আমরা দেখব যে সব ঠিক আছে।

অবশ্যই, ব্যবহারকারীরা সাধারণ ভুলগুলি এড়াতে সহায়তা করার জন্য "অদ্ভুত" ইমেলটি টাইপ করার সময় আপনি ফ্রন্ট-এন্ডে কিছু সতর্কতা বা সরঞ্জামদণ্ড প্রদর্শন করতে পারেন, যেমন ডোমেন অংশে কোনও বিন্দু বা উদ্ধৃতি না দিয়ে নামে ফাঁকা স্থান ইত্যাদি। তবে ব্যবহারকারী যদি সত্যিই এটি চান তবে আপনাকে অবশ্যই "হ্যালো @ ওয়ার্ল্ড" ঠিকানাটি গ্রহণ করতে হবে।

এছাড়াও, আপনাকে অবশ্যই মনে রাখতে হবে যে ইমেল ঠিকানার মানটি ছিল এবং বিবর্তিত হতে পারে, তাই আপনি একবার এবং সর্বকালের জন্য কিছু "স্ট্যান্ডার্ড-বৈধ" রিজেক্স্প টাইপ করতে পারবেন না। এবং আপনাকে অবশ্যই মনে রাখতে হবে যে কিছু কংক্রিট ইন্টারনেট সার্ভারগুলি সাধারণ মানের কিছু বিবরণ ব্যর্থ করতে পারে এবং প্রকৃতপক্ষে নিজের "পরিবর্তিত মান" দিয়ে কাজ করতে পারে।

সুতরাং, কেবলমাত্র @, সামনের দিকে ব্যবহারকারীকে ইঙ্গিত করুন এবং প্রদত্ত ঠিকানায় যাচাইকরণ ইমেলগুলি প্রেরণ করুন।


1
আপনার রেজেক্স চেক @করে না, তবে এটি সত্যই এটি পরীক্ষা করে না যে ইমেল পরিচালনা করে এমন কোনও আরএফসি-র প্রতি এটি বৈধ। এটি লিখিত হিসাবে কাজ করে না। আমি এটি regex101.com এর মাধ্যমে চালিয়েছি এবং এটি বৈধ ঠিকানাগুলির সাথে মেলে ব্যর্থ হয়েছে
মাচাভিটি

আপনি কি কেবল রেজেক্স বা পুরো উত্তরটি পড়েছেন? সম্পূর্ণরূপে আপনার সাথে একমত। আমাকে দয়া করে বলুন, জিএফ.এল.কম সার্ভারটি কি অনুমান করে যে জো@gmail.com এবং jo.e@gmail.com একই ঠিকানা? এমন অনেকগুলি সার্ভার রয়েছে যা মানদণ্ডে বা ফ্রেস মানদণ্ডের দ্বারা নয়। তবে তাদের ব্যবহারকারীদের ইমেলগুলি সরবরাহ করুন। আপনি যদি একবার কিছু রিজেপেক্স টাইপ করেন এবং কেবলমাত্র এটি দ্বারা বৈধতা পান তবে আপনার কোনও গ্যারান্টি নেই যে এটি ভবিষ্যতে ঠিক থাকবে এবং আপনার ভবিষ্যতের ব্যবহারকারীরা তাদের "নতুন উপায়" ইমেলগুলি ব্যর্থ করবে না। সুতরাং, আমার অবস্থানটি একই: আপনি যদি ইমেল ঠিকানা যাচাই করতে চান তবে মূল বিষয় - কেবল সক্রিয়করণ ইমেল প্রেরণ করুন।
ফ্লেমস্টোরম

@Machavity কিন্তু regexp মধ্যে বার্জপোর্ট জন্য ধন্যবাদ, আমি থেকে এটি সংশোধন /^[^@]+@[^@+]$/করতে/^[^@]+@[^@]+$/
FlameStorm

রেজেক্স ফিক্স করার জন্য আপনার কাছে প্রপস, তবে কীভাবে এটি filter_varপদ্ধতিতে উন্নতি হয় ? এটি খারাপভাবে ফর্ম্যাট করা ঠিকানাগুলি গ্রহণ করার সমস্যা সমাধান করে না। আপনার রেজেক্স আনন্দের joe@domainসাথে একটি বৈধ ইমেল ঠিকানা হিসাবে গ্রহণ করবে , যখন তা নয়
মাচাভিটি

@ মাচাভিটি, ভাল, উদাহরণস্বরূপ, আপনার সার্ভারে পিএইচপি এর একটি কংক্রিট সংস্করণ রয়েছে এবং আপনি এটিকে নতুনতে আপডেট করতে পারবেন না। উদাহরণস্বরূপ, আপনার পিএইচপি 5.5.15 আছে। 2018 সালে বৈধ ইমেলগুলির মান বাড়ানো হয়েছিল। এটি শীঘ্রই পিএইচপি 7.3.10 এ উপলব্ধি হবে। এবং সেখানে ভাল কাজ ফাংশন হবে filter_var($email, FILTER_VALIDATE_EMAIL, $newOptions)। তবে সার্ভারে আপনার পুরানো ফাংশন রয়েছে, আপনি কিছু ক্ষেত্রে আপডেট করতে পারবেন না। এবং আপনি কিছু নতুন বৈধ ইমেল সহ ক্লায়েন্টদের শিথিল করবেন। এছাড়াও, আমি আরও একবার লক্ষ্য করেছি, সমস্ত ইমেল-পরিবেশনকারী সেভারগুলি ইমেল ঠিকানাগুলির সাধারণ এবং আধুনিক মান অনুসারে কঠোরভাবে কাজ করে না।
ফ্লেমস্টোরম

3

আপনি যদি ইমেল ঠিকানা থেকে প্রদত্ত ডোমেনটি বৈধ কিনা তা পরীক্ষা করতে চান তবে এই জাতীয় কিছু ব্যবহার করুন:

/*
* Check for valid MX record for given email domain
*/
if(!function_exists('check_email_domain')){
    function check_email_domain($email) {
        //Get host name from email and check if it is valid
        $email_host = explode("@", $email);     
        //Add a dot to the end of the host name to make a fully qualified domain name and get last array element because an escaped @ is allowed in the local part (RFC 5322)
        $host = end($email_host) . "."; 
        //Convert to ascii (http://us.php.net/manual/en/function.idn-to-ascii.php)
        return checkdnsrr(idn_to_ascii($host), "MX"); //(bool)       
    }
}

স্ট্যান্ডার্ড ইমেইল বৈধতা সহ অনেকগুলি অবৈধ ইমেল ঠিকানা ফিল্টার করার সহজ উপায়, কারণ বৈধ ইমেল ফর্ম্যাটটির অর্থ বৈধ ইমেল নয় ।

মনে রাখবেন যে idn_to_ascii()(বা তার বোন ফাংশন idn_to_utf8()) ফাংশনটি আপনার পিএইচপি ইনস্টলেশনতে উপলব্ধ নাও থাকতে পারে , এর জন্য পিইসিএল ইন্টেল> = 1.0.2 এবং পিইসিএল আইডিএন = = 0.1 দরকার।

এছাড়াও মনে রাখবেন যে আইপিভি 4 বা আইপিভি 6 ইমেলের ডোমেন অংশ হিসাবে (উদাহরণস্বরূপ user@[IPv6:2001:db8::1]) যাচাই করা যায় না, কেবল নামকরণ করা হোস্টই পারে।

আরও এখানে দেখুন ।


আমি মনে করি না যে ইমেল ঠিকানার হোস্ট অংশটি আইপি ঠিকানাতে আইপিভি 6 ফর্ম্যাটে থাকে
গর্ডনএম

2

এখানে উত্তরগুলি পড়ার পরে, আমি এখানেই শেষ করেছি:

public static function isValidEmail(string $email) : bool
{
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return false;
    }

    //Get host name from email and check if it is valid
    $email_host = array_slice(explode("@", $email), -1)[0];

    // Check if valid IP (v4 or v6). If it is we can't do a DNS lookup
    if (!filter_var($email_host,FILTER_VALIDATE_IP, [
        'flags' => FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE,
    ])) {
        //Add a dot to the end of the host name to make a fully qualified domain name
        // and get last array element because an escaped @ is allowed in the local part (RFC 5322)
        // Then convert to ascii (http://us.php.net/manual/en/function.idn-to-ascii.php)
        $email_host = idn_to_ascii($email_host.'.');

        //Check for MX pointers in DNS (if there are no MX pointers the domain cannot receive emails)
        if (!checkdnsrr($email_host, "MX")) {
            return false;
        }
    }

    return true;
}

1

আপনি শুধু প্রকৃত Regex বিভিন্ন বিন্দু, আন্ডারস্কোর এবং ড্যাশ জন্য করতে পারবেন খুঁজছেন, তাহলে এটি নিম্নরূপ: [a-zA-z0-9.-]+\@[a-zA-z0-9.-]+.[a-zA-Z]+। এটি মোটামুটি বোকা দেখাচ্ছে ইমেলটি tom_anderson.1-neo@my-mail_matrix.comযাচাই করার অনুমতি দেবে ।


0
/(?![[:alnum:]]|@|-|_|\.)./

আজকাল, আপনি যদি এইচটিএমএল 5 ফর্ম ব্যবহার করেন type=emailতবে আপনি ইতিমধ্যে 80% সুরক্ষিত থাকায় ব্রাউজার ইঞ্জিনগুলির নিজস্ব বৈধকরণকারী রয়েছে। এটির পরিপূরক হিসাবে, এই রেজেক্সটিকে আপনার যুক্ত করুন preg_match_all()এবং এটি অস্বীকার করুন:

if (!preg_match_all("/(?![[:alnum:]]|@|-|_|\.)./",$email)) { .. }

Https://regex101.com/r/mPEKmy/1 বৈধতার জন্য এইচটিএমএল 5 ফর্মগুলির দ্বারা ব্যবহৃত রেজেক্সটি সন্ধান করুন


আমি ডাউনটোটকে খুব ডাব্লু / ও ব্যাখ্যা ঘৃণা করি। আমার ধারণা, তিনি হয়তো বলবেন: ব্রাউজারের ইমেল চেক (ক্লায়েন্ট সাইড) মোটেই নিরাপদ নয়। কোড পরিবর্তন করে যে কেউ যে কোনও সার্ভারে যে কোনও কিছুই প্রেরণ করতে পারে। সুতরাং এটি স্পষ্ট এবং চেক (আবার) সার্ভারের পাশটি করার সবচেয়ে নিরাপদ উপায়। এখানে প্রশ্নটি পিএইচপি ভিত্তিক, সুতরাং এর প্রকট ক্যামেরন কোনও ক্লায়েন্ট সমাধানের জন্য নয়, একটি সার্ভার সমাধান খুঁজছিল।
জনি

এই উত্তরটি পুরোপুরি পিএইচপি সম্পর্কিত নাও হতে পারে, তবে এইচটিএমএল পরামর্শটি কেবলমাত্র একটি ফোন / পিসি ব্যবহার করে "মানক" ব্যবহারকারীকে কভার করে। এছাড়াও সাইটটি ব্যবহার করার সময় ব্যবহারকারী "তার" ব্রাউজারে সরাসরি একটি তথ্য পান। সার্ভারের সাইডে আসল চেকগুলি এটির সাথে আচ্ছাদিত নয় sure বিটিডাব্লু, @ তিলেশিউস একটি পিএইচপি পরিবর্তনের কথা উল্লেখ করেছে, তাই তাঁর মন্তব্য সম্পর্কিত আইএমএইচও।
k00ni

আপনি সম্ভবত "80% নিরাপদ ব্রাউজার ইঞ্জিনগুলির নিজস্ব বৈধকারক রয়েছে" এই ধারণার কারণে এটি সম্ভবত ভোট পেয়েছে। ব্রাউজারের মাধ্যমে HTTP অনুরোধগুলি প্রেরণ করার মতো আরও অনেক উপায় রয়েছে, সুতরাং আপনি ব্রাউজার এজেন্টটি পরীক্ষা করে নিলেও কোনও অনুরোধ নিরাপদ বলে ধরে নিতে পারবেন না।
জাবারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.