私は現在、この正規表現パターンを使用して、ドメイン名をデータベースに追加する前に検証しています。
$pattern = '/^https?:\/\/([a-zA-Z0-9_\-]+:[^\s@:]+@)?((([a-zA-Z][a-zA-Z0-9\-]+\.)+[a-zA-Z\-]+)|((2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})))(:[0-9]{1,5})?(\/[!~*\'\(\)a-zA-Z0-9;\/\\\?:\@&=\+\$,%#\._-]*)*$/';
このパターンでは、サブドメイン、ipv4文字列などが許可されます。これはディレクトリ用であるため、通常は有効な文字列は許可されません。たとえばhttp://localhost
、とにかく、追加する必要があるのは、ipv6IP文字列と次のような国際ドメイン名のサポートです。たとえば、müller.com
私は現在使用しています:
$url = "http://müller.com/"
if(preg_match($pattern,$url)) {
echo "valid";
} else {
echo "invalid";
}
また、ipv6アドレスと外部文字を除いて、検証したいほとんどすべてを検証します。
本当に私の一日になるので、誰かが2つの追加を思い付くことができるだろうかと思います。私はPHPに非常に慣れていないので、物事を私に投げつけないでください。代わりに、実際の例を見せて、追加したものを説明できれば、はるかに便利です。
たぶん、チェックする前に外国のものを有効なpunycode URLに変換し、代わりにpunycodeを許可する必要があります。私は提案を受け付けています。
どうもありがとうございました-あなたの助けは大歓迎です
編集:私は同様の解決策を探していないので、この質問が重複しているとは思えません。さらに、参照されている既存の解決策はうまくいきません。FILTER_VALIDATE_URLは、許可したくない文字列を許可し、他のソリューションでも正規表現パターンが役に立たなくなるため、機能しません。
私が探しているのは私が持っているものですが、さらにipv6IP文字列とpunycode名/国際名をサポートしています。