目的
有人可以解释一下吗purpose正则表达式中这些控制字符的数量[...]?
这些不可打印控制字符的目的是创建一个严格符合定义电子邮件地址格式的 RFC 的正则表达式。
以防万一有人想知道 - 是的 - 这个电子邮件正则表达式中的控制字符确实do符合 RFC 规范。我认为验证这一点超出了这个问题的范围,所以我不会详细引用规范,但这里是相关部分的链接:3.2.3(原子) https://www.rfc-editor.org/rfc/rfc5322#section-3.2.3, 3.2.4(带引号的字符串) https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4, 3.4(地址规范) https://www.rfc-editor.org/rfc/rfc5322#section-3.4, 3.4.1(addr-spec规范) https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1, 4.1(其他过时代币) https://www.rfc-editor.org/rfc/rfc5322#section-4.1。总之,地址的本地部分和域部分允许包含带引号的字符串,允许包含某些不可打印的控制字符。
引用自SonarQube 规则 S6324 https://rules.sonarsource.com/javascript/RSPEC-6324(强调):
ASCII 表中代码 32 以下的条目称为控制字符或非打印字符。因为他们不是common在 JavaScript 字符串中,在正则表达式中使用这些不可见字符是最常见的likely一个失误。
遵循规范是not一个失误。当 lint 规则是usually有用的会遇到人们代码中没有帮助的情况,人们通常只使用 lint 工具的个案忽略机制。我认为这解决了赏金的第二条,其中规定:
有什么更好的替代方案可以避免损坏您的侧面并同时通过 SonarQube 质量门?
IE。使用提供的机制之一使 SonarQube 忽略这些违反规则的行为。您也可以选择完全不检查该规则,但这可能有点矫枉过正。
对于 SonarQube,使用NOSONAR评论 https://docs.sonarqube.org/latest/faq/根据具体情况禁用警告。
有用的例子
这取决于具体情况。
如果您的最终目标纯粹是验证是否任何给定的电子邮件地址是 RFC 定义的有效电子邮件地址,那么严格遵循 RFC 规范的正则表达式非常有用。
这不是每个人的最终目标。引用自维基百科 https://en.wikipedia.org/wiki/Email_address#Local-part:
尽管技术上有效的特殊字符范围很广,但实际上组织、邮件服务、邮件服务器和邮件客户端通常并不接受所有这些字符。例如,Windows Live Hotmail 仅允许使用字母数字、点 (.)、下划线 (_) 和连字符 (-) 创建电子邮件地址。常见的建议是避免使用一些特殊字符,以避免电子邮件被拒绝的风险。
没有什么可以解释的why大多数应用程序并不完全遵守规范,但您可以推测,或者您可以尝试询问他们的维护人员。例如,在某些人的背景下,诸如简单性之类的考虑因素可能会被声明或视为比完全遵守 RFC 更重要。
如果您的目标是检查给定的电子邮件地址是否有效hotmail电子邮件地址and拒绝 RFC 允许但 hotmail 使用的子集不允许的电子邮件地址,则完全符合 RFCnot是必要的(有用的)。