【问题标题】:regex rejects part of the first group (order)正则表达式拒绝第一组的一部分(订单)
【发布时间】:2016-08-10 22:44:17
【问题描述】:

我正在尝试修改现有的电子邮件正则表达式以允许字符之间有一个连字符,就像点分隔符一样。

^([\w]+(?:\.[\w]+)*(?:\-[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$

我的顺序有问题:如果我先使用连字符然后使用点,正则表达式会忽略点之前字符左侧的所有内容:

my-cool.email@domain.com -> my-cool.email@domain.com(不要介意空格)。

前两组的最大长度限制为 64,但它不起作用,当我输入超过 64 个字符时,它通过了正则表达式,并且有效。第三组最大长度为 7,如果超过则不会验证。

你可以举个例子:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa是个好结果

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa 是一个糟糕的结果。

第一个示例在@ 前后有64 个as,第二个示例有65 个as

https://regex101.com/r/yO1xH7/3

我也想在@ 之后做同样的事情,但它比我想象的要复杂。

有什么建议吗?谢谢。

【问题讨论】:

    标签: regex validation match email-validation regex-lookarounds


    【解决方案1】:

    你在放连字符的地方犯了一个小错误。这是正确的:

    ^([\w]+(?:[\.\-][\w]+)*(?:[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$
    

    我猜你不明白,因为你不知道?:的功能。它是正则表达式非捕获组。这是为了避免那里的那种模式。

    【讨论】:

    • 定义你想要的长度限制,然后我可以帮你
    • 我的意思是用词来定义它。也许给我一个通过正则表达式的太长电子邮件的例子以及它应该是什么
    • 我已经多次看到你的正则表达式了。我需要用 human 语言来解释,而不是代码语言。给我预期的结果,当前的错误结果是什么。更新您的问题帖子并告诉我何时完成。
    • 没有任何好坏结果的样本仍然很难理解
    • 可能是 regex101.com 页面中的错误。或者也许是正则表达式的问题,我得到了灾难性的回溯。
    猜你喜欢
    • 2014-12-06
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2022-06-29
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多