2016-03-23 9 views
2

私は<textarea>を持っています。私は何かをタイプして、私が入力したものに応じて特定の答えを受け取ります。私は句読点で書くときに問題を発見しましたが、それは私に予想される答えを与えません。スイッチケースで句読点を無視するにはどうすればよいですか?ここでスイッチケースで文字列の句読点を無視する方法はありますか?

は私のコードです:

<button onclick="myFunction()">Try it</button> 

<textarea id="box" rows="4" cols="50"></textarea> 
<p id="output"></p> 

<script> 
function myFunction() { 
var text = document.getElementById("output"); 
var str = document.getElementById("box").value.toLowerCase(); 
switch(str){ 
case "hi": text.innerHTML = "Hi there!";break; 
case "hello": text.innerHTML = "Hello,hello!";break; 
case "good morning": text.innerHTML = "Good morning, pal!";break; 
case "good evening": text.innerHTML = "Good evening, sir!";break; 
default: 
text.innerHTML = "I don't know what to say. Try to say 'hello' or 'hi'.";break; 

} 
} 
</script> 
+2

スイッチ/ケースは正確な比較を行い、あなたはその動作を変更することはできません。あなたは入力文字列を調整することができます –

+1

スイッチに渡す前に文字列からすべての句読点を削除するだけです。文字列を小文字にすることも良い考えかもしれません。 –

+0

私はそれを解決します。 @АндрейБеньковскийのご提案ありがとうございます。 – EddNewGate

答えて

1

ソリューションは、スイッチにそれを渡す前に、文字列からすべての句読点を削除することです:

run code

var input = "H.E,L:;!?L()[o]{}"; 
// You can add more punctuation into the regex if you need 
var str = input.toLowerCase().replace(/[.,:;!?(){}\[\]]+/g, ''); 
var result; 
switch(str){  
    case "hi": result = "Hi there!";break; 
    case "hello": result = "Hello,hello!";break; 
    case "good morning": result = "Good morning, pal!";break; 
    case "good evening": result = "Good evening, sir!";break; 
    default: 
    result = "I don't know what to say. Try to say 'hello' or 'hi'.";break; 
} 

出力:

Hello,hello! 

ところで:あなたの特定の状況で私の代わりに、スイッチケースのオブジェクトを使用したい:

run code

var responses = { 
    hi: "Hi there!", 
    hello: "Hello,hello!", 
    "good morning": "Good morning, pal!", 
    "good evening": "Good evening, sir!" 
}; 
var default_response = "I don't know what to say. Try to say 'hello' or 'hi'."; 

var input = "H.E,L:;!?L()[o]{}"; 
var key = input.toLowerCase().replace(/[.,:;!?(){}\[\]]+/g, ''); 
var result = key in responses ? responses[key] : default_response; 
関連する問題