不同的编码更改为在正则表达式中不匹配

时间:2015-07-03 13:56:52

标签: ruby regex encoding

我最近发现我的用户存在一些漏洞。注册的一些电子邮件中有一些字符的编码与UTF-8不同。所以我试图用gsub清理所有这些电子邮件。到现在为止,我正在尝试使用此正则表达式捕获所有带有缺陷的记录。解释正则表达式:http://regexr.com/3bati

/\A[^@\s]+@([^@\s]+\.)+[^@\W]+\z/

但是我无法捕获以下作为标志插入数据库的字符串

"\u200btest@example.com".encode('utf-8')

如何改进此正则表达式以改进我的验证并且不要让编码破坏我的登录?

1 个答案:

答案 0 :(得分:1)

当我理解您的任务时,您希望确保用户输入的电子邮件是她想要输入的内容。我会选择:

"\u200btest@example.com".gsub(/[^\p{ASCII}]/, '').encode('ISO-8859-1')

首先,您无需确保它是有效的电子邮件。任务不同。中学,所有非ascii应该被过滤掉。这很可能。

当然,您可以应用任何进一步的电子邮件验证检查。

NB: #.encode最后是为了确保在制裁后保留有效的ISO-8859-1字符串。