Girilen e-posta, belirli bir etki ise sadece komut dosyası çalıştırmak

4 Cevap php

Ben kullanıcının girdiği e-posta adresi, belirli bir etki ise sadece eylemleri yürütecek bir komut dosyası oluşturmak için çalışıyorum. Ben regex programı yoluyla test zaman iş gibi görünüyor bir regex oluşturuldu, ancak benim PHP komut kullanıldığında, geçerli e-postalar geçersiz olduğunu söylüyor. Bu durumda, ben from@secondgearsoftware.com, @ secondgearllc.com veya asia.secondgearsoftware.com başarı ve reddedilmesi gereken tüm diğerlerini yankı herhangi bir e-posta istiyorum.

$pattern = '/\b[A-Z0-9\._%+-]+@((secondgearsoftware|secondgearllc|euro\.secondgearsoftware|asia\.secondgearsoftware)+\.)+com/';
$email = urldecode($_POST['email']);
if (preg_match($pattern, $email))
{
    echo 'success';
}
else
{
    echo 'opposite success';
}

Ben deseni ile futzed ne gerçekten emin değilim. Herhangi bir yardım mutluluk duyacağız.

4 Cevap

Ben regex bırakın ve sadece o eşleşirse stristr kontrol etmek için kullanmanızı öneririz. Böyle bir şey çalışması gerekir:

<?php
// Fill out as needed
$domains = array('secondgearsoftware.com', 'secondgearllc.com');

$email = urldecode($_POST['email']);
$found = false;
for(i=0;i<count($domains);i++)
{
    if ($domains[i] == stristr($email, $domains[i]))
        $found = true;
}

if ($found) ...
?>

Bu fonksiyon stristr bu durumda eşleşme olarak aynı olmalıdır sonuna bir eşleşme, bulunan kısmından e-posta adresi verir. Teknik önce etki (fkdskjfsdksfks.secondgeartsoftware.com) için bir şey olabilir, ama sadece bunu önlemek için "@ domainneeded.com" ekleyebilirsiniz. Bu kod biraz daha uzun zamanda, ancak kolayca regex endişesi olmadan yeni etki alanları ile uzatıldı.

Düzenli ifade biraz kapalı (bu foo@secondgearsoftwaresecondgearsoftware.com sağlayacak) ve basitleştirilmiş olabilir:

$pattern = '/@((euro\.|asia\.)?secondgearsoftware|secondgearllc)\.com$/i';

Ben harf duyarsız yapılan ve dizenin sonuna kadar demirlemiş ettik.

"@" Önce ne kontrol etmek için bir ihtiyaç olması görünmüyor - Gerekirse bunun için uygun bir doğrulama rutin olmalıdır, ama bu sadece e-posta adresi bu alanların birine ait olup olmadığını kontrol etmek istiyorum görünüyor.

Muhtemelen regex harf duyarsız yapmak için (sonunda i not) /\b[A-Z0-9\._%+-]+@((euro\.|asia\.)secondgearsoftware|secondgearllc)\.com/i kullanmanız gerekir. Bu durumda mantıklı değil sonsuz tekrarı için izin gibi ben de + s düştü.

İşte düzenli ifadeler kullanarak çözüm korumak için kolay bulunuyor

$domains = array(
    'secondgearsoftware',
    'secondgearllc',
    'euro\.secondgearsoftware',
    'asia\.secondgearsoftware'
);
preg_match("`@(" .implode("|", $domains). ")\.com$`i", $userProvidedEmail);

İşte testlerin bir çift var:

$tests = array(
    'bob@secondgearsoftware.com',
    'bob@secondgearllc.com',
    'bob@Xsecondgearllc.com',
    'bob@secondgearllc.net',
    'bob@euro.secondgearsoftware.org',
    'bob@euro.secondgearsoftware.com',
    'bob@euroxsecondgearsoftware.com',
    'bob@asia.secondgearsoftware.com'
);

foreach ( $tests as $test ) { 
    echo preg_match("`@(" .implode("|", $domains). ")\.com$`i", $test), 
         " <- $test\n";
}

Sonuç (1 elbette geçiyor)

1 <- bob@secondgearsoftware.com
1 <- bob@secondgearllc.com
0 <- bob@Xsecondgearllc.com
0 <- bob@secondgearllc.net
0 <- bob@euro.secondgearsoftware.org
1 <- bob@euro.secondgearsoftware.com
0 <- bob@euroxsecondgearsoftware.com
1 <- bob@asia.secondgearsoftware.com