2008-12-22 12 views
9

मेरे पास यह प्रश्नोत्तरी आवेदन है जहां मैं सही उत्तर के साथ टाइप करने वाले लोगों से मेल खाता हूं। अभी के लिए, मैं क्या कर मूल रूप से है जो:पर्ल में स्ट्रिंग की तुलना करते समय मैं उच्चारणों को कैसे नजरअंदाज कर सकता हूं?

if ($input =~ /$answer/i) { 
    print "you won"; 
} 

यह अच्छा है अगर जवाब "मछली" के रूप में उपयोगकर्ता "एक मछली" टाइप कर सकते हैं और एक अच्छा जवाब गिना जा।

मुझे जिस समस्या का सामना करना पड़ रहा है वह है, ठीक है, मेरे उपयोगकर्ता जैसे मैं फ्रेंच हूं, और मैं "टैटन" टाइप करने वाले उपयोगकर्ता को स्वीकार करने और कहने में सक्षम होना चाहता हूं, और उत्तर "टाटन" है।

तो, मैं क्या कर सकता है, यह है:

use POSIX qw(locale_h); 
use locale; 
setlocale(LC_TYPE, "fr_FR.ISO8859-15"); 
setlocale(LC_COLLATE, "fr_FR.ISO8859-15"); 

और मेरी जांच दिनचर्या में, एक कार्य करें: जवाब के साथ वैसे ही

$input = lc($input); 
$input =~ tr/àáâãäåçèéêëìíîïñòóôõöùúûüýÿ/aaaaaaceeeeiiiinooooouuuuyy/; 

और कुछ।

मुझे यह पसंद नहीं है, क्योंकि मुझे हार्ड कोड चीजें हैं, और जिस दिन मैं फैसला करता हूं कि मैं यूटीएफ -8 दुनिया के लिए आईएसओ -885 9-15 दुनिया छोड़ रहा हूं, मैं बर्बाद हो गया हूं।

तो, मैं तार तुलना करने के लिए एक तरह से, कि "tâton" eq "taton", "maçon" eq "macon" या "macon" =~ /maçon/ सच हो कर देगा की तलाश में हूँ।

+0

नकारात्मकता यह है कि उपयोगकर्ता टाइप कर सकता है: "स्वार्थी gnomes" और वे अभी भी सही होंगे। –

+0

यह सिर्फ और उदाहरण था, और, ठीक है, वे हर बार संपूर्ण डिक्शनरी भी टाइप कर सकते हैं :-) – mat

+0

शायद आप वहां कुछ शब्द सीमाएं चाहते हैं: m/\ b $ answer \ b/ –

उत्तर

0

यह नियमित अभिव्यक्तियों का आह्वान करने के लिए उचित अवसर की तरह प्रतीत नहीं होता है - आपको केवल स्वीकार्य उत्तरों की एक सूची होनी चाहिए, साथ ही कुछ "ए", "द", और उनकी भाषा-विशिष्ट समकक्षों जैसे गैर-आवश्यक शब्दों को हटाने के लिए फ़िल्टर करना चाहिए ।

जो भी आप करते हैं, यह मुझे स्पष्ट लगता है कि यह चरित्र-एन्कोडिंग-जागरूक और भाषा-जागरूक होना चाहिए। नियमित अभिव्यक्ति आमतौर पर न तो होती है।

संबंधित मुद्दे

 संबंधित मुद्दे