求个PHP正则

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

阅读 4.8k
评论
    5 个回答
    • 5.1k
    ^[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上问过
        对了 域名就是这种格式的 不包括后缀

          • 100

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

            • 2.2k
            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);
              撰写回答

              登录后参与交流、获取后续更新提醒

              相似问题
              推荐文章