2016-03-19 34 views
-2

Ben carrierwave hata ayıklama yaşıyorum. Eğlenceli. Sorunun bu aşağı gelir düşünüyorum:Regex eğlencesi. Bu regex dizgeme neden uymuyor?

if record.new_record? && record.send("has_#{attribute}_upload?") && record.key !~ record.send(attribute).key_regexp 

#key_regexp kodu şudur: carrierwave_direct İçinde

bu kod var

ben hata ayıklama zaman bu kadar değerlendirir
/\A#{store_dir}\/[a-f\d\-]+\/.+\.(?i)#{extension_regexp}(?-i)\z/ 

:

record.send(attribute).key_regexp 
/\Astories\/\/main_images\/[a-f\d\-]+\/.+\.(?i)(jpg|jpeg|gif|png)(?-i)\z/ 

Benim store_dir şudur:

"hikayeleri/# {model.id}/main_images"

ve ben model.id sıfır olduğundan boş "/" bölümü var.

"/stories/main_imagescache/20160319-1549-2202-5826/blueapronimage.jpg"

Neden şu anda eşleşmiyor:

record.key bu nedir?

regex ekstra çizgi vardır ve bu bölüm ne olduğundan emin değilim gibi görünüyor:

[a-f\d\-]+\/.+\.(?i)(jpg|jpeg|gif|png)(?-i) 

o af, rakam veya harf arasındaki herhangi bir sayıda mı "-" sonra, bir "/", sonra herhangi bir sayıdaki harf veya sayı, sonra bir". "....

(? i) nedir?

Yakalama grupları nedir?

(? -i) nedir?

record.key !~ /\Astories/ 
true 

Yanlış olmalıdır:

bu sorun olduğunu düşünüyorum. Şuna

+2

RegEx'inizi [RegExr] 'a yerleştirin (http://regexr.com/) veya [Regex101] (https://regex101.com /). Daha sonra parçaların üzerine gelin ve tam olarak ne yaptığını size söyleyecektir. Her ikisinde de, sizin için RegEx'i açıklayan bir * Açıklayıcı * bölümü vardır. – Druzion

cevap

0

Bak, onu açıklıyor:

[a-f\d\-]+   # Matches a-f, any digit, - (hyphen) 
         #^One or more times (+) 
\/     # Matches a/
.+     # Matches any character one or more times 
\.     # Matches a . (dot) 
(?i)     # States that anything after this is case-insesitive 
         #^Inline Flag 
(jpg|jpeg|gif|png) # Selects file extension 
         #^(either jpg, jpeg, gif, or png) 
(?-i)     # Removes Inline Flag 

Her birinin yaptığı açıklamaya gerektiğini. Ayrıca, Live Demo numaralı telefona da bakın.

. Örneğiniz eşleşiyor gibi görünebilir, belki kodunuzun başka bir kısmı hatalı ...
+0

görünüşte, bu yanlış davranıştır: record.key! ~/\ Astories/Gerçek değeri döndürür – Jwan622

+0

Canlı Demo'ya koydum, iyi çalışıyor gibi görünüyor, [** bkz? **] (https: // regex101.com/r/jD4pK4/2) – Druzion