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 正则表达式替换必须保留德语变异元音的主要内容,如果未能解决你的问题,请参考以下文章