【问题标题】:How to convert C# regex to typescript regex?如何将 C# 正则表达式转换为打字稿正则表达式?
【发布时间】: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 有一个内部指令可以为您完成这项工作
  • 您的正则表达式不允许电子邮件地址的 + 用户部分。和其他许多字符一样,它是一个有效字符。

标签: c# regex angular typescript


【解决方案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:感谢您指出这一点。我更新了我的答案。
  • 这个正则表达式是有效的:^(?=\P{Ll}*\p{Ll})(?=\P{Lu}*\p{Lu})(?=\P{N}*\p{N})(?=[\p{L}\p{N}]*[^\p{L}\p{N}])[\s\S]{8,}$ 但是当插入到两个/ 之间时,它会破坏语法。而你的例子没有。编辑看来我必须加倍 \
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2016-09-13
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多