gpt4 book ai didi

regex - 用户名不能包含重复的下划线或句点

转载 作者:行者123 更新时间:2023-12-04 13:08:24 25 4
gpt4 key购买 nike

我一直在为这些该死的事情而挣扎。我记得曾经有一位讲师告诉我们,如果您遇到需要使用正则表达式来解决的问题,那么实际上您现在有两个问题。

嗯,我当然同意这一点。正则表达式是我们不经常使用的东西,但是当我们这样做时,就像阅读一些外星语言一样(无论如何对我来说都很好)......我想我会下定决心继续阅读这本书。

我面临的挑战是,我需要根据以下标准验证用户名:

  • 可以包含字母,大小写
  • 可以包含数字
  • 可以包含句点 ( . ) 和下划线 ( _ )
  • 句点和下划线不能连续,即 __ ..不允许,但 ._._将是有效的。
  • 总共最多 20 个字符

  • 到目前为止,我有以下内容: ^[a-zA-Z_.]{0,20}$但当然它允许重复下划线和句点。

    现在,从有效字符集和最大长度开始,我可能做错了这一切。我一直在尝试(未成功)创建一些环视或后视或其他任何方式来搜索无效的周期重复( . )和下划线( _ ),不知道分解此要求的方法或方法是什么变成正则表达式的解决方案是。

    任何人都可以提供建议/替代方法或为我指明正确的方向吗?

    最佳答案

    这是你需要的:

    ^(?:[a-zA-Z0-9]|([._])(?!\1)){5,20}$

    Regular expression visualization

    Edit live on Debuggex

    您可以演示它匹配的内容 here .

    “字母字符 ( [a-zA-Z0-9] ) 或 ( | ) 点或下划线 ( [._] ),但后面没有跟在后面 ( (?!\1) ),而且是 5 到 20 次 ( {5,20})。”
  • (?:X)只是一个非捕获组,即您之后不能使用 \1 引用它, $1?1语法。
  • (?!X)被称为负前瞻,即字面意思是“后面没有 X”。
  • \1指第一个捕获 团体。自第一组(?:...){5,20}已设置为非捕获(见#1),第一个捕获组是 ([._]) .
  • {X,Y}表示从 X 到 Y 次,您可以根据需要更改它。
  • 关于regex - 用户名不能包含重复的下划线或句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18032459/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com