Prettier 移除 Angular 中的转义字符
Posted
技术标签:
【中文标题】Prettier 移除 Angular 中的转义字符【英文标题】:Prettier removes escape characters in Angular 【发布时间】:2020-09-15 23:03:29 【问题描述】:我在我的 Angular 项目中使用 Prettier,并且我正在尝试为表单验证器包含一个正则表达式模式。当我运行 Prettier 时,字符串发生了根本性的改变,使模式验证功能失调,如下所示:
之前:
export const EmailVal: ScaffoldValidator = PatternVal(
"/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]2,9$/"
);
之后:
export const EmailVal: ScaffoldValidator = PatternVal(
"/^[0-9a-zA-Z]([-.w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]2,9$/"
);
我已经浏览了 Prettier Docs,它谈到了在单引号和双引号的上下文中更改转义,但断言其他转义将保持不变。我也浏览了我的tsLint.json
,并没有什么对我来说是来源。它确实将“Codelyzer”表示为规则集。是否有某个设置我可以禁用以防止这种行为?
【问题讨论】:
我不认为那些斜线是 ever 实际上在字符串中。要获得实际的反斜杠,您需要 在字符串中 对其进行转义:[-.\\w]
。或者使用正确的正则表达式文字形式/.../
,而不是传递字符串。
【参考方案1】:
您可以直接使用正则表达式(注意:没有引号 - 只有斜杠):
/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]2,9$/;
或更正字符串转义(注意双反斜杠):
"/^[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]2,9$/";
^^ ^^ ^^
考虑使用 EsLint - 它可以警告您这些情况(请参阅 no-useless-escape rule):
【讨论】:
以上是关于Prettier 移除 Angular 中的转义字符的主要内容,如果未能解决你的问题,请参考以下文章
prettier 函数function 后面空格移除,.prettierrc与.eslintrc.js冲突
有没有办法列出 Angular 项目中所有活动的 ESLint / Prettier 规则?