Javascript 正则表达式替换必须保留德语变异元音

Posted

技术标签:

【中文标题】Javascript 正则表达式替换必须保留德语变异元音【英文标题】:Javascript regex replace has to keep german mutated vowels 【发布时间】:2016-06-12 05:17:07 【问题描述】:

在搜索字段中,应该只允许使用常规字符和德语变异元音,如 ä、ö、ü、Ä、Ö、Ü 和 ß。

我的正则表达式看起来像:

/(<([^>]+)>)|[^a-zA-Z0-9äöüÄÖÜß\s]/ig

替换:

phrase.replace(regex, "")

替换前:

Ärzte

替换后:

rzte

不幸的是,变异元音被替换删除了。任何保留这些字符的建议都表示赞赏。

提前致谢。

【问题讨论】:

我无法重现错误 (demo) 确保您的源代码(文件)具有 UTF-8 字符集 同上,它非常适合我。 确实我无法将源文件转换为 utf-8。我解决它的方式就像下面的 Aarons 解决方案,知道十六进制值只是一种解决方法而不是完美的。 /(]+)>)|[^a-zA-Z0-9\xE4\xF6\xFC\xC4\xD6\xDC\xDF\s]/ig @BernhardKraus 老实说,这确实不是一种解决方法。在正则表达式中有一些特殊字符会被转义,使用十六进制代码类似于这样做。此外,正如我在帖子中所说,有很多正则表达式脚本试图验证电子邮件地址等,这些正则表达式脚本几乎总是使用十六进制代码作为重音字符。很抱歉,georg 写下了我的答案并让您质疑它,但按照我建议的方式进行操作确实是最佳实践,至少在 Internet 的 javascript 中是这样。对使用十六进制代码有信心,这没有错! :) 【参考方案1】:

问题很可能是字符集未设置为 UTF-8。您应该修复您的字符集,但更好的做法可能是对该正则表达式使用十六进制代码,而不是直接使用该字符,然后在其中留下一些 cmets,以便您记住十六进制代码的用途。

检查这是否有效

phrase.replace(/(<([^>]+)>)|[^a-z0-9\xE4\xF6\xFC\xC4\xD6\xDC\xDF\s]/ig, "\n")

您可以从这里找到其他一些十六进制转义符 http://www.javascripter.net/faq/accentedcharacters.htm

【讨论】:

不好的建议。他们需要修复其编码,而不是创建损害可读性的解决方法。 向我解释为什么它在官方标准中使用十六进制转义,以及为什么互联网上大多数尝试电子邮件验证的基于 JS 的正则表达式都使用十六进制转义..regular-expressions.info/email.html(向下滚动到 RFC 5322) .为什么不采用最实用的方式,然后在正则表达式之后立即发表评论,以便读者可以看到十六进制代码的字符。 我觉得奇怪的是,一个有效且完全解释的答案被视为“坏建议”,当它是一个完全实用的问题解决方案时(并且,从上面的对话来看,应该是公认的答案)。 谢谢@ChrisLear。我只是不喜欢*** down 投票系统。似乎更倾向于观点而不是事实。 感谢 Aaron 的上述评论。您的解决方案已被投票并标记为正确答案。最后,如果开发人员看到不好的建议或解决问题的正确方法,这似乎是一个见仁见智的问题。感谢您的帮助。

以上是关于Javascript 正则表达式替换必须保留德语变异元音的主要内容,如果未能解决你的问题,请参考以下文章

sql 数据库将坏字符替换为德语(变音符号)字符

使用正则表达式替换仅保留正斜杠和数字

smarty 在 php 7.2 和德语变音符号上替换 ans ISO-8859-1 的问题

如何在 Notepad++ 正则表达式查找/替换中保留括号

C#正则表达式保留头尾替换中间为*

JavaScript-正则表达式