正则表达式根据文本之前(子域 + 域 + 扩展)


Regex according before text (subdomain + domain + ext)

我想验证这些字符串

dkfi.fr
dje_uf.fkeid.fr
dkei.fkei.fr

因为子域可以包含下划线,但域 + ext 不能。

我已经完成了这个正则表达式:

^([0-9a-z'-_'.]+)*('.[0-9a-z'-]+){2,}$

但它不会验证 dkfi.fr 因为 * 后面的点 ''. 是必需的。我不想放''.?因为这个错误的字符串将被接受:"djeud.kd_dk.fr"

我希望如果第一部分(在 * 之前)未验证,则不需要该点,因此如果我们位于字符串的开头。

将正则表达式更改为:

^([0-9a-z_-]+'.)*([0-9a-z-]+'.[0-9a-z-]+)$

Symfony框架使用该模式进行域匹配。

~^(['pL'pN'pS-]+'.)+['pL]+$~ixu

在完整版中,它还允许使用IP和端口:GitHub 源

根据您的需求,您可以添加带有下划线的部分

~^(['pL'pN'pS_-]+'.)*(['pL'pN'pS-]+'.)+['pL]+$~ixu