如何将两个正则表达式合并为一个?

how can I join two regex into one?

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

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

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

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

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

这里是 之前关于这个问题的 post

编辑:我正在使用 reglarexpression 属性装饰我的视图模型的字符串 属性 并且使用不显眼的方式将其呈现为 javascript 因此它必须验证使用 javascript。我在最初的 post

中没有提到这一点

您可以使用:

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

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

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

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

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

请注意 [\x00-\x7F] 还包括 @ 符号。在 C# 正则表达式中,我们可以在字符 class.

中使用 -[@] 从范围中减去它

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

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