求个PHP正则

只能由“0-9a-zA-Z”和“-”组成,并且“-”不能在头尾出现,长度至少一位。
征求一下广大牛淫的意见。

阅读 7.3k
6 个回答
^[0-9a-zA-Z][0-9a-zA-Z\-]*[0-9a-zA-Z]$

上边的不对,修改一个:

^(?!-)[a-z0-9A-z-]*[a-z0-9A-z]$

不以 - 开头,且以字母数字结尾,长度可以是1或多。

/^(?!\-)[0-9a-zA-Z\-]*?[0-9a-zA-Z]{1}$/

^([0-9a-zA-Z]{1}[0-9a-zA-Z-]*?[0-9a-zA-Z]{1}|[0-9a-zA-Z]{1})$ 
/^[0-9a-zA-Z]+([0-9a-zA-z-]+[^-\W_])*$/

关键是一个字的时候 所以给他分组就可以了 这题谁在zhihu上问过
对了 域名就是这种格式的 不包括后缀

其实分开是很简单的事情,没必要非整一个很复杂低效的正则
!/^-/.test(string) && !/-$/.test(string) && /^[0-9a-zA-Z\-]+$/.test(string)

function test($s, $t){
    var_dump(preg_match('#^(?!-)[0-9a-zA-Z-]+(?<!-)$#', $s)==$t);
}

test('a322bc', 1);
test('a32--2bc', 1);
test('a322bc-', 0);
test('-a322bc', 0);
test('-a322bc-',0);
test('1', 1);
test('a', 1);
test('sa122a', 1);
test('--', 0);
test('-', 0);
/^[^-][A-Za-z0-9-]+[^-]$/
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题