如何将 C# 正则表达式转换为打字稿正则表达式?

Posted

技术标签:

【中文标题】如何将 C# 正则表达式转换为打字稿正则表达式?【英文标题】:How to convert C# regex to typescript regex? 【发布时间】:2019-02-17 06:27:56 【问题描述】:

我是 Angular 新手,我有 c# 电子邮件正则表达式,但我不知道 c# 正则表达式和 typescript 正则表达式有什么区别。它无法正常工作。提前致谢

正则表达式:

EmailRegularExpresssion = @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z-])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]2,9)$";

电子邮件示例: adasd457@sdjf45.idie

1.不允许特殊字符

2. 后面不允许有数字。值(ex-sdf@sadf.co333)

【问题讨论】:

如果没有表达式失败的示例输入,很难为您提供帮助。 你能比“我工作不正常”更具体吗?例如,您认为正则表达式应该接受但不接受的字符串,反之亦然?您是否已经尝试过(如果有的话)找出问题所在? 你好,可以举一些输入输出的例子吗? 如果您尝试验证电子邮件,angular 有一个内部指令可以为您完成这项工作 您的正则表达式不允许电子邮件地址的 + 用户部分。和其他许多字符一样,它是一个有效字符。 【参考方案1】:

您提供的 C# 代码使用 C# 的逐字字符串语法,不需要转义反斜杠。要将其转换为普通的字符串文字,这在 C# 和 javascript 中是相同的,您可以删除前面的 @ 符号,然后通过在它们之前添加另一个反斜杠来转义反斜杠:

 "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z-])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]2,9)$"

要将其用作 JavaScript 正则表达式,请将其传递给 RegExp 构造函数:

let emailRegularExpression = new RegExp("^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z-])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]2,9)$");

或者,更好的是,您可以只使用 JavaScript 的文字正则表达式语法(不转义反斜杠:

let emailRegularExpression = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z-])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]2,9)$/;

这适用于您指定的情况:

emailRegularExpression.test("adasd457@sdjf45.idie"):是的 emailRegularExpression.test("ex-sdf@sadf.co333"): 假 emailRegularExpression.test("j²coolio@sadf.co333"): false(特殊字符)

【讨论】:

不要使用 RegExp 构造函数,它会在每次调用该行时重新编译正则表达式,而像 here 这样的 RegExp 文字将被静态编译。 @PatrickRoberts:感谢您指出这一点。我更新了我的答案。 这个正则表达式是有效的:^(?=\PLl*\pLl)(?=\PLu*\pLu)(?=\PN*\pN)(?=[\pL\pN]*[^\pL\pN])[\s\S]8,$ 但是当插入到两个/ 之间时,它会破坏语法。而你的例子没有。编辑看来我必须加倍 \

以上是关于如何将 C# 正则表达式转换为打字稿正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

打字稿和正则表达式

在打字稿中应用正则表达式

正则表达式测试作为属性的指令实现错误 - 验证(打字稿+角度)

将 C# 正则表达式代码转换为 Java

正则表达式 - 将 C# 正则表达式转换为 JavaScript 正则表达式的量词的目标无效

将 po box javascript 正则表达式转换为 c# 正则表达式