代码之家  ›  专栏  ›  技术社区  ›  Think Tank

regex-允许字母数字、空格和符号,但不能仅是数字、符号或空格。里面一定有字母

  •  -4
  • Think Tank  · 技术社区  · 6 年前

    如何使用regex编写此规则:

    允许: -字母数字 -空格 -符号

    必修的:

    • 按字母顺序排列的
    • 至少允许两个

    例如:

    • “abc123--”是可接受的字符串
    • “ABC”被拒绝
    • “123-9*”被拒绝
    1 回复  |  直到 6 年前
        1
  •  1
  •   Valdi_Bo    6 年前

    评论认为 现在你有两个问题 有点恶意。 正则表达式正是验证此类问题的正确解决方案, 前提是你知道 怎样 去做。

    验证文本是否存在特定字符的一般规则是:

    1. 从开始 ^ 锚定。
    2. 放置一些正/负的lookaheads,验证除最后一个以外的所有条件。
    3. 放入“普通”regex表达式,尝试匹配最后一个条件。
    4. 以结尾 $ 锚定。

    从你所描述的可接受/不可接受的字符串来看,我看到你 有附加要求:字符串必须包含至少1个数字 (因为你描述过 abc 不可接受)。

    所以regex应该包含以下部分:

    • ^ -开始锚定。
    • (?=(?:.*[a-z]){2,}) -在0个或多个任意字符后对字母进行正查找 (即在绳子的某个地方),2次或更多。
    • (?=.*\d) -在0个或多个字符后对数字进行正查找。
    • [\w!@#$%^&*+;:,.-]+ -你想要什么的规格说明 匹配-“允许”字符,出现1次或更多次。 如果您需要更多的穿孔字符,只需在这里添加它们。 注意 - 在末尾,否则你应该引用它 反斜杠。其他字符(例如 . , * + )无需报价 之间 [ ] (他们只代表自己)。
    • 美元 -端锚。

    注意 \w 包括字母、数字和 _ .

    综上所述,整个regex是:

    ^(?=(?:.*[a-z]){2,})(?=.*\d)[\w!@#$%^&*+;:,.-]+$
    

    当然,用在 i (不区分大小写)选项。