我想在PHP中構建一個驗證腳本,它將與我的網站提供的API一起使用。這個想法是,用戶將進入他們的API應該工作的所有領域,防止競爭對手將代碼放在他們的網站上。我只是想驗證所輸入的域名是有效的格式PHP - 使用wilcards和/或子域驗證域
以下域類型應該被允許的:
- xyz.domain.xxxx
- * .domain.xxxx
- 域。 XXXX
我已搜索周圍,我發現的代碼片段(1,2,3)傾向於降低所有領域爲最簡單的表格,domain.com
,似乎沒有考慮通配符或子域名 - 或似乎與我所尋找的有所不同。
我希望有一天能掌握Reg表達式。
在此先感謝!
UPDATE:解決方案
最後我用的是拒絕TLD的正則表達式 - 如果preg_match
失敗,我再運行在域作爲一個安全網,將驗證TLD的一個DNS檢查。這可以防止人們進入垃圾一樣MyNameIsFred
$domain = str_replace('http://', '', strtolower($_REQUEST['domain']));
//Not checking TLDs. Instead if the domain fails, we will check DNS records to see if it is a TLD or somehow otherwise exists.
/* $reg = '/^(?!.{254,})(?!.*[^.]{64,})(?!.*\*\*)([a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?)(?>\.(?1)){0,126}$/iD'; //TLD domains OK */
$reg = '/^(?!.{254,})(?!.*[^.]{64,})(?!.*\*\*)[a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?(?>\.[a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?){1,126}$/iD'; //No TLD
if (preg_match($reg, $domain)!=1) {
if (!checkdnsrr($domain.'.', 'A') && !checkdnsrr($domain.'.', 'AAAA'))
//ERROR
}
//SUCCESS
它不太你在找什麼,所以不回答這個問題,但它是值得了解:http://php.net/manual/en/filter.filters.validate.php – Spudley 2013-03-27 15:08:46
你是正確的 - 不會真的有幫助,但很高興知道。謝謝 – Dutchie432 2013-03-27 16:55:04