文を解析して数値を返すことができる JavaScript 関数を構築しようとしています。
これは、以下のテストケース用にセットアップしたjsFiddleです-
- 「私は 1 ポンドあります」 -> 1
- 「私は使うべき£3.50を持っています」 -> 3.50
- 「私は 23.00 ポンドあります」 -> 23
- 「£27.33」 -> 27.33
- 「$4345.85」 -> 4345.85
- '3.00' -> 3
- '7.0' -> 7
- 「2.0 が必要です。」-> 2
- 「15.20 のはずです。」-> 15.20
- '3.15' -> 3.15
- 「私は5つしか持っていません。素晴らしいものではありません。」-> 5
- ' 34.23' -> 34.23
- 'sdfg545.14sdfg' -> 545.14
- 「昨日、私は 235468.13 ポンドを使いました。今日は、支出を減らしたいと思っています。-> 235468.13
- 「昨日、私は 340 ポンドを使いました。」-> 340
- 「今日は 14.52 ポンド、明日は 17.30 ポンドを使いました」 -> 14.52
- 「木が 0 本あります。明日は 11.33 ポンドです」 -> 0
16&17 は、最初の番号を見つける必要があることを示します。一部のテスト ケースが難しい場合があることは理解していますが、妥当な範囲をカバーできるものであれば何でも歓迎します。
これが私の関数に使用している形式です
function parseSentenceForNumber(sentence){
return number; //The number from the string
}
私は自分で 60 ~ 80% を達成できると思いますが、ここでは正規表現が最善の解決策であると予想しています。十分な数のテスト ケースがあることを願っていますが、見逃した可能性のあるものを自由に追加してください。
あなたの助けに感謝します。
**アップデート**
実用的な回答がたくさんあり、それらをより詳細に調べるために時間を費やす必要があります。Mike Samuel がコンマと .5 について言及したので、さらにいくつかのテスト ケースを追加することになりました。
18.「私は 1,000 ポンドを持っています」 -> 1000 19.「.5」 -> 0.5
そして jsalonen は、数値なしのテストケースを追加することに言及しました
20.「この文には数字が含まれていません」 -> null
これはjsalonen のソリューションを使用して更新されたフィドルです。仕様を変更しなければ 100% ですが、変更を加えれば 95% になります。カンマを使って 18 番の解決法を教えてくれる人はいますか?
**アップデート**
jsalonen の関数にコンマを削除するステートメントを追加したところ、100% になりました。
ここに最終関数があります
function parseSentenceForNumber(sentence){
var matches = sentence.replace(/,/g, '').match(/(\+|-)?((\d+(\.\d+)?)|(\.\d+))/);
return matches && matches[0] || null;
}
そして最後のフィドル
助けてくれて本当に感謝しており、途中で正規表現の知識を向上させました. ありがとう