2011-01-31 14 views
9

即時通訊使用validates_format_of方法檢查電子郵件格式:使用livevalidation插件來驗證表單,所以在我的代碼即時得到如何紅寶石正則表達式轉換爲JavaScript的? - :和Rails 3.0.3

validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

還林:

(I-MX ..?)
(?i-mx:^([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,})$) 

的Javascript不能閱讀本正則表達式。如何或在哪裏我可以改變這個正則表達式是爲原文:

/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

+0

此問題的相關搜索結果[可在此處找到](https://www.google.com/#hl=zh-CN&safe=active&sclient=psy-ab&q=(convert%7Ctranslate)+ ruby​​ + regex + to + javascript&oq =(轉化%7Ctranslate)+紅寶石+ +正則表達式到+的javascript&gs_l = serp.3 ... 6611.13840.0.14133.12.12.0.0.0.0.123.1024.9j3.12.0.les%3B..0.0 ... 1c.1.4。 PSY-ab.OIu4b055si4&PBX = 1&BAV = on.2,or.r_gc.r_pw.r_cp.r_qf。&FP = 50b26647ad5972f8&BIW = 1366&波黑= 639)。 – 2013-02-20 15:38:37

回答

1

原因是你正在使用.to_s而不是.inspect來轉換你的正則表達式。在你看來,你需要做的是使用.inspect來獲得正確的格式。這裏是一個要解釋這個問題的一些示例代碼:

email = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 
email.to_s #"(?i-mx:^([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,})$)" 
email.inspect #"/^([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,})$/i" 

所以,在你的JavaScript觀點做這樣的事情來得到你想要的實際字符串表示:

<%= email.inspect %> 
7

Ruby和JavaScript的正則表達式由具有不同能力的不同引擎解析和執行。正因爲如此,Ruby和JavaScript正則表達式具有稍微不兼容的細微差別。如果您注意到它們沒有直接翻譯,那麼您仍然可以在JavaScript中表示簡單的Ruby正則表達式。

這裏的what client side validations does

class Regexp 
    def to_javascript 
    Regexp.new(inspect.sub('\\A','^').sub('\\Z','$').sub('\\z','$').sub(/^\//,'').sub(/\/[a-z]*$/,'').gsub(/\(\?#.+\)/, '').gsub(/\(\?-\w+:/,'('), self.options).inspect 
    end 
end 

最近addition of the routes inspector to rails需要a similar approach,甚至更好,因爲它避免了猴子補丁:

def json_regexp(regexp) 
    str = regexp.inspect. 
     sub('\\A' , '^'). 
     sub('\\Z' , '$'). 
     sub('\\z' , '$'). 
     sub(/^\// , ''). 
     sub(/\/[a-z]*$/ , ''). 
     gsub(/\(\?#.+\)/ , ''). 
     gsub(/\(\?-\w+:/ , '('). 
     gsub(/\s/ , '') 
    Regexp.new(str).source 
end 

然後將這些媒體插入JavaScript代碼,使用這樣的:

var regexp = #{/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i.to_javascript}; 
+1

轉換`/[email protected]+\..+/i`會導致雙重轉義,即它不起作用。 – 2017-06-25 10:58:52