特殊字符替换为'?'

时间:2012-11-28 14:01:43

标签: ruby-on-rails forms post special-characters

我想提交简单的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

有谁知道这是怎么回事?

1 个答案:

答案 0 :(得分:0)

Regexp中的

\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?

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