我想提交简单的html表单。这是登录表单。我在rails控制器上的ruby上提交它。 当其中一个输入(电子邮件)的值有一些特殊字符时,如č,ć,đ,š或ž。那些角色被替换为?字符。
如果我在输入字段user?@ domain.com中有值,它将不会通过“/ \ A [\ w \ d ._% - ] + \ @ [\ w \ d .-] +。[ \ W] {2,4} \ Z /“
但是例如,值为userž@domain.com(使用puts方法)在ruby代码中以user?@ domain.com的形式出现,它通过了上面提到的正则表达式验证。
我正在使用jruby 1.6.5.1和Rails 2.3.8
有谁知道这是怎么回事?
答案 0 :(得分:0)
\w
似乎也捕获了č,ć等(unicode字符)。如果您只想要“普通”字符,则应使用A-Za-z0-9_
,而您的正则表达式将是
/\A[A-Za-z\d._%-]+\@[A-Za-z0-9_.-]+.[A-Za-z0-9_]{2,4}\z/
由于\d
中已有[]
,因此无需0-9。但如果我应该写它,我也会使用0-9来使它更具可读性,我更喜欢^
和$
而不是\A
和\z
。那将是(进行一些其他小的调整):
/^[A-Za-z0-9_.%-]+\@[A-Za-z0-9_.-]+.[A-Za-z]{2,4}$/
我不确定你为什么在正则表达式中允许%
? (在您的问题中包含在Regexp中)。
修改强>
我做了一些搜索,似乎是Regexp中unicode字符的不同行为,具体取决于平台。据我所知,例如在Java \w
中,[A-Za-z0-9_]
仅限于\w
,但在其他平台中,{{1}}中可以包含unicode字符。我从下面的链接中找到了这个:
以下是一些链接:
Matching (e.g.) a Unicode letter with Java regexps
在那个帖子中我找到了这些链接:
(与此问题相同)Unicode equivalents for \w and \b in Java regular expressions?