php preg_match子域名检查

时间:2014-05-18 15:17:13

标签: php regex

对于域名注册,我想添加一些验证,以防万一有人想发疯并输入一些奇怪的域名。

这就是我现在所拥有的:

preg_match('/[^a-zA-Z0-9]/', $domain)

我想添加“ - ”但它不能是第一个或最后一个字符。 $ domain必须至少包含2个或更多字符。并且不能以“ - ”开头或结尾。

RegEx Gurus:任何想法如何让这个变得简单? 谢谢!

2 个答案:

答案 0 :(得分:0)

不考虑非英文字母,您可以使用此正则表达式进行简单验证,以满足您的规则:

preg_match('/^\w[\w-]*\w$/', $domain)

这将:

  1. 需要2个或更多字符
  2. 连字符,但不是\w的第一个或最后一个字母与[a-zA-Z0-9_]相同

答案 1 :(得分:0)

^开始到$结束:至少+ [a-z0-9]之一* (-[a-z0-9]+)任意数量的[A-Z]

要使其与i匹配,请添加^ (PCRE_CASELESS) modifier。要设置最小长度,可以在(?=.{2})开始使用lookahead$pattern = '/^(?=.{2})[a-z0-9]+(?:-[a-z0-9]+)*$/i'; 检查,如果前面至少有2个字符。

(?:

{{1}}使用non-capturing group重复。

test at regex101regex faq