che*_*eks 1 php regex validation
我需要编写一个正则表达式来验证拉丁文和西里尔文域名。我写了这个函数,但它不适用于 Cyrillic 域。告诉我出了什么事?
function isDomain($url)
{
if (mb_strlen($url)==0) return false;
$url = mb_strtolower(trim($url));
$abc = '?????????????????????????????????';
if(!preg_match('/^(['.$abc.'a-z0-9\.-]{1,64})?\.(?:??|ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{3})$/i',$url))
{
return FALSE;
} else {
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
\p{Cyrillic}。/u来匹配 UniCode。??在您的 TLD 列表中使用 Unicode 代码点。还有一个观察:长度为 3 的 TLD 已经与 匹配[a-z]{3},因此我们可以将它们排除在列表之外。
function isDomain($url)
{
if (mb_strlen($url)==0) return false;
$url = mb_strtolower(trim($url));
return preg_match('/^([\p{Cyrillic}\p{Latin}\d\.-]{1,64})?\.(?:\x{0440}\x{0444}|ru|su|arpa|info|aero|name|[a-z]{3})$/iu',$url);
}
Run Code Online (Sandbox Code Playgroud)
请参阅我在Regex101.com 上的示例。