2012-11-28 511 views
1

我有簡單的html表單,我想提交。它是登錄表單。我在軌道控制器上提交它的紅寶石。 當其中一個輸入(email)的值有一些特殊字符時,如č,ć,đ,š或ž。那些角色被替換爲?字符。特殊字符替換爲'?'

如果我在輸入字段user [email protected]中有價值,它不會通過評估對「/\A[\w\d._%-]+\@[\w\d.-]+」。 [\ w] {2,4} \ z /「

但是,例如,[email protected]可以在ruby代碼中看到(使用puts方法)爲user [email protected],並且它通過上述正則表達式驗證提及。

我使用JRuby 1.6.5.1和Rails 2.3.8

有誰知道這是什麼情況?

+0

Ruby編碼支持隨上一個主要版本發生變化,因此提供Ruby和Rails版本可能會有用。 – samuil

+0

我剛剛做了,謝謝。 – eomeroff

+0

我認爲č,ć等顯示爲'?'在你的例子中,但它們仍然是相同的字符。或者你的意思是,當他們最終存儲在數據庫中時,電子郵件將與'?'一起存儲。而不是č,ć等? – 244an

回答

0

\w在Regexp似乎也趕上č,等(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來使其更易讀,我更喜歡^$而不是\A\z。這將是(與其他一些小的調整):

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

我不知道你爲什麼允許在正則表達式%? (包含在你的問題中的正則表達式中)。

編輯: 我做了一些搜索,它似乎是不同的行爲在regexp根據平臺unicode字符。據我所知,例如在Java \w中被限制爲[A-Za-z0-9_],但在其他平臺中,可以在\w中包含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