1

我有要提交的简单 html 表单。它是登录表单。我在 ruby​​ on rails 控制器上提交它。当其中一个输入(电子邮件)的值中有一些特殊字符时,例如 č、ć、đ、š 或 ž。这些字符被替换为 ? 特点。

如果我在输入字段 user?@domain.com 中有值,它将不会通过对 "/\A[\w\d._%-]+\@[\w\d.-]+.[\w] 的评估{2,4}\z/"

但例如,值 userž@domain.com 在 ruby​​ 代码中被视为(使用 puts 方法)为 user?@domain.com 并且它通过了上面提到的正则表达式验证。

我正在使用 jruby 1.6.5.1 和 Rails 2.3.8

有谁知道这是怎么回事?

4

1 回答 1

0

\w在正则表达式中似乎也捕捉到了 č、ć 等(unicode 字符)。如果你只想要你应该使用的“普通”字符A-Za-z0-9_,那么你的正则表达式将是

/\A[A-Za-z\d._%-]+\@[A-Za-z0-9_.-]+.[A-Za-z0-9_]{2,4}\z/

不需要 0-9,因为您已经\d[]. 但是如果我应该写它,我也会使用 0-9 来让它更具可读性,我更喜欢^and$而不是\Aand \z。那将是(有一些其他的小调整):

/^[A-Za-z0-9_.%-]+\@[A-Za-z0-9_.-]+.[A-Za-z]{2,4}$/

我不确定您为什么允许%使用正则表达式?(在您的问题中包含在您的正则表达式中)。

编辑: 我做了一些搜索,根据平台的不同,Regexp 中的 unicode 字符的行为似乎有所不同。据我了解,例如在 Java\w中仅限于[A-Za-z0-9_],但在其他平台中,unicode 字符可以包含在\w. 这是我从以下链接中发现的:

以下是一些链接:

使用 Java 正则表达式匹配(例如)Unicode 字母

在那个线程中我找到了这些链接:

(与此相同的问题)Java 正则表达式中 \w 和 \b 的 Unicode 等价物?

(来自正则表达式教程)http://www.regular-expressions.info/unicode.html

于 2012-11-28T15:20:47.203 回答