私のウェブサイトが提供するAPIと組み合わせて使用される検証スクリプトをPHPで作成しようとしています。アイデアは、ユーザーがAPIが機能する必要のあるすべてのドメインに入力し、競合他社が自分のサイトにコードを配置するのを防ぐことです。入力したドメインが有効な形式であることを確認したいだけです
次のドメインタイプを許可する必要があります。
- xyz.domain.xxxx
- * .domain.xxxx
- domain.xxxx
私が検索したところ、見つけたコードのスニペット(1、2、3 )は、すべてのドメインを最も単純な形式に縮小する傾向があり、ワイルドカードやサブドメインを考慮していないようです-または少し動作しているようです私が探しているものとは異なります。domain.com
いつの日か、RegExpressionsをマスターしたいと思っています。
前もって感謝します!
更新:ソリューション
最終的にTLDを拒否するRegExを使用しました。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