正则表达式如何判断连续的出现同样的字符

要求:包括26个英文字母(不区分大小写字母)、“0-9”十个数字、“.”和英文中的连接号 - ,但开头和结尾不能含有 . 和 - ,连接号 - 和 . 不能连续出现。

我写的:

/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

问题:-怎么判断不能连续出现

用例:
-zhangsn3.com
zhang--sn3.com
zhangsn3.ww-c-san.com
.zhangsan#
.zhangsan
zhangs3.
zhang-
zhangsan#
zhangsan&
zhang#san
zhagnsan.sdan
zhagnsan.@sdan
zhagnsan@sdan
zhangsan.-sda4
zhangsan-.sda4
zhangsan-4.cen张
zhangsan-4.cen张2@

张的@zhangsan-4.cen
张的zhangsan-4.cen
2张的Zhangsan-4.cen
2张的zhangsan-4.cen1
-.zhangsn3.com
.-zhangsan#
.-zhangsan
zhangs3.-
zhang-.

后面改了下这样写的:
/^[a-zA-Z0-9]{1,61}((-)?[a-zA-Z0-9]{1,61})?(.[a-zA-Z0-9]{1,61}((-)?[a-zA-Z0-9]{1,61}))$/
好像可以了。。

阅读 5.3k
4 个回答
/^[a-z0-9]+([\.-][a-z0-9]+)+$/i;

1.不能出现连续的-和.符号
使用负向零宽断言
(?!.*--)(?!.*\.\.)
2.不能出现任意连续字符
使用负向零宽断言+反向引用
(?!.*(.)\1)

测试用的数据应该列一下,别人才好知道你要的数据格式

/^(?!.*?[.-]{2,})(?=.*?\d)(?=.*?[a-zA-Z])(?=.*?[.-])[a-zA-Z\d][a-zA-Z\d.-]*[a-zA-Z\d]$/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题