带撇号的字母消失了[重复]

Posted

技术标签:

【中文标题】带撇号的字母消失了[重复]【英文标题】:Letters with apostrophe disappears [duplicate] 【发布时间】:2016-08-24 08:21:50 【问题描述】:

这是我验证电子邮件地址的正则表达式。但它不断删除带有撇号的字母。例如(Hélen,变成 Hlen)

var firstname = $("#FirstName").val().replace(/å/gi, "a").replace(/ä/gi,"a").replace(/ö/gi, "o").replace(/[^a-z0-9\s]/gi, '');

var lastname = $("#LastName").val().replace(/å/gi, "a").replace(/ä/gi, "a").replace(/ö/gi, "o").replace(/[^a-z0-9\s]/gi, '');

$("#Mail").val(firstname + "." + lastname + '@customer.Email');

【问题讨论】:

你的问题是什么,你想让你的正则表达式做什么?移除、更换或保留它们? 这不是撇号。 [^a-z0-9\s] 匹配不是az 之间的字母或09 之间的数字的任何内容,并将其删除。这不是验证电子邮件的正确方法。 Using a regular expression to validate an email address 他正在根据名字和姓氏构建电子邮件 ID。 replace(/[^a-z0-9\s]/gi, '') 用 "" 删除你的 é,因此 Hélen 变成 Hlen 【参考方案1】:

我认为您实际上需要的是用非重音版本替换重音字符。

我在这里找到了这个解决方案:Remove accents/diacritics in a string in javascript

希望对你有帮助

【讨论】:

【参考方案2】:

使用:replace(/[^a-z0-9\s]/gi, ''),您将用空字符串替换任何不是 非重音字母 的内容。 这就是它被删除的原因。

为了避免这种情况发生,您必须使用“é”,就像使用“å”或“ä”一样,将其替换为非重音字母。

例如,要将“é”、“è”、“ê”和“ë”替换为 e,您可以使用replace(/[éèêë]/gi, "e") 之前使用replace(/[^a-z0-9\s]/gi, '')

你必须对“à”和“ô”等做同样的事情......

【讨论】:

非常感谢!现在可以使用了。

以上是关于带撇号的字母消失了[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将带撇号的变量传递给 SQL 查询

通过 PhpMyAdmin 将带撇号的 SQL 数据库导入 MySQL

将带撇号的 json 值发送到 Web 服务时出现无效对象错误

如何在Elasticsearch上搜索带或不带撇号的单词?并处理拼写错误?

使用 PHP 加载 UTF-8 编码的 HTML 站点

查找并删除撇号和之前的一个字母?