正文之前的正则表达式(子域+域+ ext)

时间:2014-12-23 14:55:45

标签: php regex

我想验证这些字符串

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

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

我做了这个正则表达式:

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

但它没有验证dkfi.fr因为点\。在*之后是必需的。 我不想把\。?因为这个错误的字符串将被接受:“djeud.kd_dk.fr”

如果第一部分(在*之前)未验证,我希望该点不是必需的,所以如果我们在字符串的开头。

2 个答案:

答案 0 :(得分:1)

将正则表达式更改为:

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

答案 1 :(得分:0)

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

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

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

根据您的需要,您只需添加下划线部分

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