Düzenli İfade ile belirli bir etki alanı URL doğrulama

3 Cevap php

Ben ancak başarı olmadan bu normal bir ifade yazmak için, kendimi çevrimiçi çalışıyor ve arama oldum.

Ben belirli bir URL belirli bir etki ve (PHP) bir iyi biçimlendirilmiş bağlantıdan olduğunu doğrulamak gerekir. Örneğin:

İyi Domain: example.com

Example.com öylesine iyi URL'ler:

Yani kötü URL'ler example.com itibaren:

Some notes: I don't care about "http" verus "https" but if it matters to you assume "http" always The code that will use this regex is PHP so extra points for that.

UPDATE 2010:

Gruber büyük bir URL regex ekler:

?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

Görevinden bakınız: An Improved Liberal, Accurate Regex Pattern for Matching URLs

3 Cevap

Ona Benim bıçak

<?php

$pattern = "#^https?://([a-z0-9-]+\.)*blah\.com(/.*)?$#";

$tests = array(
    'http://blah.com/so/this/is/good'
  , 'http://blah.com/so/this/is/good/index.html'
  , 'http://www.blah.com/so/this/is/good/mice.html#anchortag'
  , 'http://anysubdomain.blah.com/so/this/is/good/wow.php'
  , 'http://anysubdomain.blah.com/so/this/is/good/wow.php?search=doozy'
  , 'http://any.sub-domain.blah.com/so/this/is/good/wow.php?search=doozy' // I added this case
  , 'http://999.sub-domain.blah.com/so/this/is/good/wow.php?search=doozy' // I added this case
  , 'http://obviousexample.com'
  , 'http://bbc.co.uk/blah.com/whatever/you/get/the/idea'
  , 'http://blah.com.example'
  , 'not/even/a/blah.com/url'
);

foreach ( $tests as $test )
{
  if ( preg_match( $pattern, $test ) )
  {
    echo $test, " <strong>matched!</strong><br>";
  } else {
    echo $test, " <strong>did not match.</strong><br>";
  }
}

//  Here's another way
echo '<hr>';
foreach ( $tests as $test )
{
  if ( $filtered = filter_var( $test, FILTER_VALIDATE_URL ) )
  {
    $host = parse_url( $filtered, PHP_URL_HOST );
    if ( $host && preg_match( "/blah\.com$/", $host ) )
    {
      echo $filtered, " <strong>matched!</strong><br>";
    } else {
      echo $filtered, " <strong>did not match.</strong><br>";
    }
  } else {
    echo $test, " <strong>did not match.</strong><br>";
  }
}

Bir regex kullanmak zorunda mı? PHP bu tür bir şey yapmak için fonksiyonları yerleşik bir yeri vardır.

filter_var($url, FILTER_VALIDATE_URL)

Bir URL geçerli olup olmadığını size söyleyecektir ve

    $domain = parse_url($url, PHP_URL_HOST);

size ne ifade eder etki anlatacağım.

Bazı deli regex daha net ve daha rahat olabilir.

Belki de:

^https?://[^/]*blah\.com(|/.*)$

Edit:

http://editblah.com karşı koruyun

^https?://(([^/]*\.)|)blah\.com(|/.*)$