【问题标题】:how can I join two regex into one?如何将两个正则表达式合二为一?
【发布时间】:2015-07-01 05:38:18
【问题描述】:

当我在 ASP.NET 中使用 RegularExpressionAttribute 时,我需要将两个正则表达式合并为一个,并且它不允许多个实例。

如何将以下两个正则表达式合二为一?

.*?@(?!.*?\.\.)[^@]+$
[\x00-\x7F]

第一个检查电子邮件的域部分中没有 2 个连续的点,第二个正则表达式检查所有字符都是 ascii

我认为这可能就像像 (.*?@(?!.*?\.\.)[^@]+$)([\x00-\x7F]) 这样将它们连接在一起一样简单,但这不起作用

这里是 link 之前与此问题相关的帖子

编辑:我正在使用 reglarexpression 属性装饰我的视图模型的字符串属性,并且它使用不显眼的方式呈现为 javascript,因此它必须使用 javascript 进行验证。我在最初的帖子中没有提到这一点

【问题讨论】:

    标签: asp.net regex unobtrusive-javascript


    【解决方案1】:

    你可以使用:

    ^[\x00-\x7F]+?@(?!.*?\.\.)(?=[\x01-\x7F]+$)[^@]+$
    

    【讨论】:

    • 您的正则表达式也将匹配444@ff@ff.com
    • 我记得你说过look-arounds are expensive,不是吗? :)
    • 我实际上不记得我在什么问题上发表了该声明。但总的来说是的,如果有替代方案,那么避免环顾四周。但是 OP 已经在使用前瞻 (?!.*?\.\.)
    • 感谢您的回答。不幸的是,我只能选择一个答案。我赞成你的
    • 如上答案-我的单元测试通过但实际上在页面上不起作用..我将编辑我的问题并说明我的意思
    【解决方案2】:

    你可以使用这个正则表达式

    ^[\x00-\x7F-[@]]*?@(?!.*?\.\.)[\x00-\x7F-[@]]+$
    

    或者,如果您想匹配@ 之前的至少1 个字符:

    ^[\x00-\x7F]+@(?!.*?\.\.)[\x00-\x7F-[@]]+$
    

    注意[\x00-\x7F] 还包括@ 符号。在 C# 正则表达式中,我们可以在字符类中使用 -[@] 从范围中减去它。

    我相信你不需要锚,因为你在 RegularExpressionAttribute 中使用它。

    这是一个demo on regexstorm.net,删除第二个@,你就会得到一个匹配项。

    【讨论】:

    • 我修复了它,因为我忘记将锚点和字符类减法添加到第一个范围出现。但是由于您更新了说明正则表达式需要使用 javascript 的问题,我同意这不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多