5

大学生だけが自分の Web サイトにサインアップできるようにしたいのですが、それを制御する方法がわかりませんでした。また、.edu だけでなく、.edu.fr、edu.tr、またはその他の .edu 拡張子が私の Web サイトに参加できるようにしたいと考えています。正規表現を使用することを考えていましたが、解決策が見つかりませんでした。誰かが私を助けてくれたら嬉しいです?

それほど重要ではありませんが、私は PHP を laravel フレームワークで使用しています。

4

2 に答える 2

3

ほとんどの教育機関は、次のパターンに従うドメイン名を持っています。

uni.edu
uni.edu.fr
uni.ac.uk

次の正規表現は、そのようなすべてのケースをカバーしています。

/(\.edu(\.[a-z]+)?|\.ac\.[a-z]+)$/

必要に応じて正規表現にケースを追加できます。確認リンクが記載された自動メールを送信して、メールが本物であることを確認します。

対応PHP:

if (preg_match('/(\.edu(\.[a-zA-Z]+)?|\.ac\.[a-zA-Z]+)$/i', $domain)) {
    // allow
}
于 2012-12-05T07:52:38.070 に答える
1

これを行うための優れた方法はありませんが、@ 記号を使用してアドレスを分解することが 1 つの方法として考えられます。

// Split the email address into 2 values of an array using the @ symbol as delimiter.
$emailParts = explode('@', $theEmailAddress);
// If the second part (domain part) contains .edu, period, country code or just .edu, then allow signup.
if (preg_match('/\.edu\.[^.]+$/i', trim($emailParts[1])) || preg_match('/\.edu$/i', trim($emailParts[1]))) {
    // Use the above if you are assuming that the country codes can be any number of characters. If you know for sure country codes are 2 chars, use this condition:
    // (preg_match('/\.edu\.[^.]{2}$/i', trim($emailParts[1])) || preg_match('/\.edu$/i', trim($emailParts[1])))
    // Allow signup
}

もちろん、これはドメインまたはメールアドレスが既存のものであることを保証するものではありません!

于 2012-12-05T07:45:51.447 に答える