URLのドメインを取得するための非常に簡単な機能があります。返される文字列から探しているのはドメイン名だけです( 'www.example.com'ではなく 'example.com')。RegEx結果6文字と7(+)文字ドメインの違い
私はこの機能をテストしていますが、7文字以下のドメインを除いて問題はないようです。ここで
は私のサンプルの入力と出力は、次のとおりです。
IN:http://www.example.com/asdf.html
- OUT:example.com
IN:http://www.1234.com/asdf
- OUT IN:1234.com
:http://www.exampl.com/asdf
- OUT www.exampl.com
私を捨てているのは、最後の入出力です。ドメインが7文字未満のときに、なぜ関数がwww.
を返すのか分かりません。
function getDomain($url = STR_EMP) {
preg_match("/[a-zA-Z0-9\-\_]{1,63}\.[a-z\.]{2,10}$/", parse_url($url, PHP_URL_HOST), $_domain_tld);
return $_domain_tld[0];
}
$url1 = "http://www.example.com/asdf.html"; // example.com
$url2 = "http://www.1234.com/asdf"; //1234.com
$url3 = "http://www.exampl.com/asdf"; // www.exampl.com
var_dump(getDomain($url1), getDomain($url2), getDomain($url3));
(出力)
string(11) "example.com"
string(8) "1234.com"
string(14) "www.exampl.com"
私は正規表現とプロではないんだけど、6文字のドメインは、{1,63}の基準に適合するようだ:ここで
コードです表現の中で。誰かがwww.
の6文字のwww.exampl.com
ドメインを返す理由を説明できますか?
もっと短いURLを防ぐためにRegExがありますか?
ありがとうございました。
UPDATE:ドメインの
基準:
some.site.com
出力はsite.com
a.nother.site.com
も出力site.com
最初に正規表現を正しくエスケープする –
期待する出力の基準は何ですか?入力が 'some.site.com'の場合、' site.com'または 'some.site.com'だけが必要ですか(' www.'だけを取り除くべきですか?) 'a.longer.one.com'はどうですか? 'one.com'をしたいですか? 'longer.one.com'? – Chris
私は 'site.com'と' one.com'を望みます、ごめんなさい。 – TJB4rn3s