"Web Sitesi Adı" için PHP RegEx

4 Cevap php

Duplicate: PHP validation/regex for URL

Amacım web sitesi adı için bir PHP regex oluşturmaktır. Regex bir kurşun toplama formu için ve birisi girebilir web sitesi adı sözdizimi herhangi okunaklı türlü kabul etmelidir. Ayrıntılı bir ara sonra ben orada bulamıyorum şaşırdım.

İşte regex ben arıyorum o maçlar şunlardır:

VE, o da uymalıdır:

  • somewebsite.com / gibi: bir arka eğik çizgi, yukarıdaki herhangi bir
  • subdomains

4 Cevap

Bunu oynamak gerekebilir:

<?php

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&amp;?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

$url1  = "http://www.somewebsite.com";
$url2  = "https://www.somewebsite.com";
$url3  = "https://somewebsite.com";
$url4  = "www.somewebsite.com";
$url5  = "somewebsite.com";

function valURL($pattern, $url) {

        $return = false;

        if(preg_match($pattern, $url)) {
                $return = true;
        }

        if($return == true) {
                echo "Match URL: <font color='green'>" . $url . "</font><br /><br />";
        } else {
                echo "Try Again: <font color='red'>URL: " . $url . "</font><br /><br />";
        }
}

valURL($pattern, $url1);
valURL($pattern, $url2);
valURL($pattern, $url3);
valURL($pattern, $url4);
valURL($pattern, $url5);

?>

Gerekli RegEx yok.

$subject = 'example.com';
$part = (stripos($subject, 'http://') === FALSE)  ? 'http://' : '' ;
var_dump(filter_var($part.$subject, FILTER_VALIDATE_URL));

Ben düzenli ifadeler gibi basit görevler için cevap değildir kanıtlamak için kriter için buraya cevaplar verdi. Andy Leekman kod diğer cevapların% 30'dan% 60 daha hızlı bir bütündür. O bir hata var mıydı, ama ben bir kod satırı ile sabit. Aşağıda benim sonuçlarını görebilirsiniz.

İşte testler koştu hangi kod.

http://pastie.org/476900

alt text

Herkes birinin bir URL doğrulamak için normal bir ifade kullanır PS Eğer ben deli ;) gidebilir

/^([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i

http://www.shauninman.com/archive/2006/05/08/validating_domain_names

Google izniyle. Ama çok karmaşıktır, bu nedenle başkasının bir tane basit olabilir.

EDIT: İlk Andy'nin cevabı sahipsiniz. Eğer bir regex için bir alternatif bulmak durumunda, 9/10 alternatif çok daha iyidir.