2

サインアップ フォームで、上記の URL フィールドに入力したものと同じドメイン名の電子メール アドレスを入力するようユーザーに求めています。

現在、次の方法でデータを収集しています。

URL : http://www.domain.com domain.com の部分は、ユーザーが入力するものです。はhttp://wwwハードコードされています。

Email : info @ domain.com太字部分はユーザーが入力します。@はハードコードされています。

URL の domain.com 部分と電子メールの domain.com 部分が一致する必要があります。現時点では、2 つのフィールドは別々であるため、一致させることができます。

しかし、上記のアプローチをあきらめて、ユーザーにドメイン名と電子メール全体を入力させたいと思います。その場合、ユーザーが上記の URL フィールドに入力したのと同じドメインの電子メールを入力したかどうかを確認する良い方法は何でしょうか。

私はphpを使用してこれらすべてを行っています。

4

6 に答える 6

1

これは私のバージョンです(テスト済み、動作します):

<?php
$domain = 'www2.example.com'; // Set domain here
$email = 'info@example.com';  // Set email here

if(!preg_match('~^https?://.*$~i', $domain)) { // Does the URL start with http?
    $domain = "http://$domain"; // No, prepend it with http://
}
if(filter_var($domain, FILTER_VALIDATE_URL)) { // Validate URL
    $host = parse_url($domain, PHP_URL_HOST); // Parse the host, if it is an URL
    if(substr_count($host, '.') > 1) { // Is there a subdomain?
        $host = substr($host, -strrpos(strrev($host), '.')); // Get the host
    }
    if(strpos(strrev($email), strrev($host)) === 0) { // Does it match the end of the email?
        echo 'Valid!'; // Valid
    } else {
        echo 'Does not match.'; // Invalid
    }
} else {
    echo 'Invalid domain!'; // Domain is invalid
}
?>
于 2012-11-18T09:17:40.387 に答える
1

あなたはこれを行うことができますexplode()

supp url = bla@gmail.com
$pieces = explode("@", $url);
$new = $pieces[1]; //which will be gmail.com

今また爆発する

$newpc= explode(".", $new );
$new1 = $newpc[0]; //which will be gmail
于 2012-11-18T07:29:39.777 に答える
1
    <?php

    //extract domain from email
    $email_domain_temp = explode("@", $_POST['email']);
    $email_domain = $email_domain_temp[1];

    //extract domain from url
    $url_domain_temp = parse_url($_POST['url']);
    $url_domain = strip_out_subdomain($url_domain_temp['host']);

    //compare
    if ($email_domain == $url_domain){
        //match
    }

    function strip_out_subdomain($domain){
        //do nothing if only 1 dot in $domain
        if (substr_count($domain, ".") == 1){
             return $domain;
        }
        $only_my_domain = preg_replace("/^(.*?)\.(.*)$/","$2",$domain);
        return $only_my_domain;
    }

したがって、これは次のとおりです。

まず、メール文字列を配列内の 2 つの部分に分割します。2 番目の部分はドメインです。

次に、php 組み込み関数を使用して URL を解析し、「ホスト」を抽出し、(オプションの) サブドメインを削除します。

次に、比較します。

于 2012-11-18T07:30:27.100 に答える
0

次のように、正のルックビハインドを持つ正規表現を使用します(つまり、特定のパターンが前にある場合にのみ一致させたい正規表現を返しますが、ルックビハインド自体は一致に含めません)。

<?php 
$url = preg_match("/(?<=http:\/\/www\.).*/",$_POST['url'],$url_match);
$email = preg_match("/(?<=@).*/",$_POST['email'],$email_match);
if ($url_match[0]==$email_match[0]) {
  // Success Code
 }   
else {
 // Failure Code
     }
?>

もちろん、httpsやwww2なども考慮する必要があるため、これは少し単純化されていますが、疑問符を「オプション」演算子として使用して、RegExpにわずかな変更を加えるだけで済みます。

于 2012-11-18T07:55:17.433 に答える
0

あなたができる:

$parsedUrl = parse_url($yourEnteredUrl);
$domainHost = str_replace("www.", "", $parsedUrl["host"]);
$emailDomain = array_pop(explode('@', $yourEnteredEmail));
if( $emailDomain == $domainHost ) {
  //valid data
}
于 2012-11-18T07:38:00.907 に答える
0
$email = 'myemail@example.com';
$site  = 'http://example.com';

$emailDomain = ltrim( strstr($email, '@'), '@' );

// or automate it using array_map(). Syntax is correct only for >= PHP5.4
$cases = ['http://'.$emailDomain, 'https://'.$emailDomain, 'http://www.'.$emailDomain, 'https://www.'.$emailDomain];

$bSameDomain = in_array($site, $cases);
var_dump($bSameDomain);
于 2012-11-18T08:08:21.613 に答える