मैं यह नहीं समझ सकता कि मैं यहाँ क्या गलत कर रहा हूँ ..

if @calc.docket_num =~ /DC-000044-10/ || @calc.docket_num =~ /DC-67-09/
  @calc.lda = true
else
  @calc.lda = false
end

लेकिन ऐसा लगता है कि @calc.docket_num कोई भी स्ट्रिंग हो सकता है और यह हमेशा true के रूप में वापस आता है।

क्या मैं यह सही नहीं कर रहा हूँ?

7
Trip 1 फरवरी 2011, 05:55
आपके कोड का परीक्षण करते समय, यह वास्तव में "DC-000044-10" या "DC-67-09" के अलावा किसी भी मूल्य के लिए "शून्य" (if/else कथन के लिए "गलत" के बराबर) देता है ...
 – 
Dylan Markow
1 फरवरी 2011, 05:59

3 जवाब

सबसे बढ़िया उत्तर

यह एक-लाइनर है:

@calc.lda = !!(@calc.docket_num =~ /DC-000044-10|DC-67-09/)

!! प्रतिक्रिया को सही/गलत के लिए बाध्य करता है, फिर आप सीधे अपना बूलियन वैरिएबल असाइन कर सकते हैं।

32
Mark Thomas 1 फरवरी 2011, 07:00
2
!! के उपयोग के लिए +1। हालांकि रेगेक्स थोड़ा सख्त हो सकता है: /DC-(?:000044-10|67-09)/
 – 
the Tin Man
1 फरवरी 2011, 07:34
4
बहुत बढ़िया। !! के बारे में कभी नहीं पता था।
 – 
CambridgeMike
18 अप्रैल 2012, 07:47
1
मैंने बस एक ही प्रश्न को गुगल किया और एक साल पहले अपना खुद का प्रश्न पाया और आपका जवाब पाया जो कि अद्भुत है। बहुत धन्यवाद।
 – 
Trip
12 जुलाई 2012, 20:30
आप जानते हैं कि आपने जिस उत्तर को सर्वश्रेष्ठ माना है उसे आप कर सकते हैं बदल सकते हैं... :)
 – 
Mark Thomas
30 अक्टूबर 2012, 19:18
1
"तंग" रेगेक्स के बारे में: सिर्फ इसलिए कि आप कर सकते हैं, इसका मतलब यह नहीं है कि आपको चाहिए। यह रेगेक्स गोल्फ नहीं है। पूर्ण डॉकेट नंबरों को सूचीबद्ध करने का दस्तावेज़ मूल्य कुछ वर्णों की बचत से कहीं अधिक है।
 – 
Mark Thomas
7 नवम्बर 2013, 18:53

वैकल्पिक रूप से आप Regexp वर्ग के लिए ट्रिपल बराबर (===) ऑपरेटर का उपयोग कर सकते हैं जिसका उपयोग case सिंटैक्स का उपयोग करते समय समानता निर्धारित करने के लिए किया जाता है।

@calc.lda = /DC-000044-10|DC-67-09/ === @calc.docket_num 
@calc.lda
=> true

सावधान रहें

/Regexp/ === String, String === /Regexp/ से बिल्कुल अलग है!!!! विधि क्रमविनिमेय नहीं है। प्रत्येक वर्ग === को अलग तरह से लागू करता है। उपरोक्त प्रश्न के लिए, रेगुलर एक्सप्रेशन === के बाईं ओर होना चाहिए।

Regexp कार्यान्वयन के लिए, आप इस पर अधिक दस्तावेज़ देख सकते हैं (रूबी 2.2.1 के अनुसार) यहां

4
Curley 15 अप्रैल 2015, 21:41

मुझे लगता है कि यह मुद्दा आपके कार्यान्वयन में कहीं और है। इसे जांचने के लिए इस कोड का प्रयोग करें:

k = 'random information'

if k =~ /DC-000044-10/ || k =~ /DC-67-09/
  puts 'success'
else
  puts 'failure'
end

=> failure
2
Pan Thomakos 1 फरवरी 2011, 06:01
2
इसे टर्नरी ऑपरेटर का उपयोग करके छोटा किया जा सकता है: puts (k =~ /DC-(?000044-10|67-09)/) ? 'success' : 'failure'
 – 
the Tin Man
1 फरवरी 2011, 07:38