如何将 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# 正则表达式转换为打字稿正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式测试作为属性的指令实现错误 - 验证(打字稿+角度)