のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,833人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ+ JavaScript の質問用スレッド vol.95 +

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    302 : Name_Not - 2012/01/09(月) 19:52:12.43 ID:??? (+0,-30,-183)
    正規表現で書いたよー。

    function calc(expr) {
    return expr.replace(/\(([^()]+)\)|\((.+)\)/g,function(x,a,b) { return calc(a||b); })
    .replace(/((?:\d+[*/])+)(\d+)/g,function(x,a,b) { b*=1; return (a.slice(-1)==="*")? calc(a.slice(0,-1))*b : calc(a.slice(0,-1))/b; })
    .replace(/((?:\d+[+-])+)(\d+)/g,function(x,a,b) { b*=1; return (a.slice(-1)==="+")? calc(a.slice(0,-1))+b : calc(a.slice(0,-1))-b; })*1;
    }

    alert(calc("1+2+(3*4)+5*7-((30/6)*(2*10/5+3-(1-1)))+31"));
    304 : Name_Not - 2012/01/09(月) 19:59:36.20 ID:??? (+19,+26,-2)
    すまそ。先頭の5*は不要だったな
    305 : Name_Not - 2012/01/09(月) 20:00:47.97 ID:??? (+16,+28,+0)
    やっと来たか
    307 : Name_Not - 2012/01/09(月) 20:02:15.59 ID:??? (+22,+29,-2)
    注文の多い料理店
    310 : Name_Not - 2012/01/09(月) 20:04:34.87 ID:??? (+23,+29,-31)
    >>309
    そうだろw普通こういうのは正規表現オンリーでやらないからな。絶対対応しきれない。
    311 : 302 - 2012/01/09(月) 20:09:00.25 ID:??? (-29,-30,-172)
    指摘された 2つはいった。

    function calc(expr) {
    return expr.replace(/\(([^()]+)\)|\((.+)\)/g,function(x,a,b) { return calc(a||b); })
    .replace(/((?:-?\d+(?:\.\d*)?[*/])+)(-?\d+(?:\.\d*)?)/g,function(x,a,b) { b*=1; return (a.slice(-1)==="*")? calc(a.slice(0,-1))*b : calc(a.slice(0,-1))/b; })
    .replace(/((?:-?\d+(?:\.\d*)?[+-])+)(-?\d+(?:\.\d*)?)/g,function(x,a,b) { b*=1; return (a.slice(-1)==="+")? calc(a.slice(0,-1))+b : calc(a.slice(0,-1))-b; })*1;
    }
    312 : Name_Not - 2012/01/09(月) 20:09:50.57 ID:??? (-28,-29,-52)
    渡された文字列が計算式かどうかを判定してevalだろ
    計算式以外の文字列ならエラー返せばよいわけだし
    ()+-*/^%1234567890.以外の文字があれば弾けばだいたい安全だろ
    313 : Name_Not - 2012/01/09(月) 20:11:56.64 ID:??? (+13,+24,+0)
    >>312
    それでおk
    314 : Name_Not - 2012/01/09(月) 20:15:56.26 ID:??? (+24,+29,-39)
    おkじゃねーよw
    計算式かどうかチェックしたあとにエネルギー線によって
    ビットアップセットが起きる場合も考えないといけない
    その場合eval使ってた方が確率的に危険だろが
    317 : Name_Not - 2012/01/09(月) 20:18:19.23 ID:??? (+9,+15,-29)
    >>316
    シングルイベント・アップセットとは

     主に外部放射線に起因するソフトエラーは、またの名をシングルイベント・アップセットともいう。
    320 : Name_Not - 2012/01/09(月) 20:20:27.44 ID:??? (-26,-29,-10)
    (+5)*(-4)--5+-6
    321 : Name_Not - 2012/01/09(月) 20:21:18.51 ID:??? (+22,+29,-5)
    それが電卓で入力されることはない
    322 : Name_Not - 2012/01/09(月) 20:21:36.90 ID:??? (+23,+29,-1)
    >>320
    さすがにそれはカッコが必要だと思う
    323 : Name_Not - 2012/01/09(月) 20:27:44.65 ID:??? (+24,+29,-1)
    >320
    とりあえず今月中にいいの作ってくるから待ってて
    324 : Name_Not - 2012/01/09(月) 20:36:53.77 ID:??? (+27,+29,-19)
    乗せられて冬休みの宿題を作ってやるスレ民であった。
    325 : Name_Not - 2012/01/09(月) 20:39:18.18 ID:??? (-22,-25,-19)
    おまえら>>110から200レスもevalで喧嘩してるのか…
    327 : Name_Not - 2012/01/09(月) 20:41:26.58 ID:??? (+27,+29,-49)
    ・evalは絶対に使うべきではない
    ・基本的には避けるべきだが、局所的にevalの使用機会がある
    ・evalは積極手に使うべき
    328 : Name_Not - 2012/01/09(月) 21:30:39.83 ID:??? (-13,-30,-307)
    盛り上がってるね。数式のパース書いてみたけど。個人的にはちゃんと
    チェックできる奴が分かっていて使うeval()は必要悪、みたいに思う。
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML//EN">
    <html><head><title>???</title>
    <script type="text/javascript">
    var s = '1+2';
    function exp() {
    var v = term();
    while(s.match(/^[+-]/)) {
    if(s.match(/^[+]/)) { s = s.substring(1); w = exp(); v += w; }
    else { s = s.substring(1); w = exp(); v -= w; } }
    if(s.match(/./) && !s.match(/^[)]/)) throw 'syntax'; else return v;
    }
    function term() {
    var v = fact();
    while(s.match(/^[*/]/)) {
    if(s.match(/^[*]/)) { s = s.substring(1); w = term(); v *= w; }
    else { s = s.substring(1); w = term(); v /= w; } }
    if(s.match(/./) && !s.match(/^[-+)]/)) throw 'syntax'; else return v;
    }
    つづく(2レスなのでご容赦を)
    329 : Name_Not - 2012/01/09(月) 21:31:17.72 ID:??? (-27,-30,-309)
    function fact() {
    if(s.match(/^[0-9]/)) {
    var t=s.match(/^[0-9]+/)[0]; s=s.substring(t.length); return parseInt(t); }
    if(s.match(/^[(]/)) {
    s = s.substring(1); var v = exp();
    if(s.match(/^[)]/)) { s = s.substring(1); return v; } else throw 'syntax'; }
    }
    function calc() {
    try {
    s = document.getElementById('t0').value; alert(exp());
    } catch(e) { alert('syntax error, seeing:' + s); }
    }
    </script>
    </head><body>
    <div><input type="text" id="t0" value="((1+2+3)*2+19*(30*2))/2">
    <button onclick="calc()">calc</button></div></body></html>
    332 : Name_Not - 2012/01/09(月) 21:42:12.82 ID:??? (+28,+29,-13)
    333 : Name_Not - 2012/01/09(月) 21:43:18.29 ID:??? (+22,+29,-2)
    電卓関係ないな
    334 : Name_Not - 2012/01/09(月) 21:43:51.69 ID:??? (+31,+29,-3)
    >>332
    はい、そりゃ誰でも書けるとは思います。練習としてやってみました。
    335 : Name_Not - 2012/01/09(月) 21:55:46.22 ID:??? (+32,+29,-51)
    evalはテンプレートエンジンとかで使うな

    ここみたいな低レベルなスレでは一律使うなでいいんじゃねーの
    >>110も危なっかしいから使うなって言われたんだろ
    336 : Name_Not - 2012/01/09(月) 21:59:29.11 ID:??? (+28,+27,-2)
    >>333
    最終的にJSパーサーを作るまでやるから
    337 : Name_Not - 2012/01/09(月) 22:07:57.21 ID:??? (+24,+27,+0)
    >>332
    カッコ使えないじゃん
    338 : Name_Not - 2012/01/09(月) 22:16:15.81 ID:??? (+22,+29,-1)
    カッコつけんなよ
    339 : Name_Not - 2012/01/09(月) 22:39:03.30 ID:??? (+12,+12,-4)
    それこそ328に作ってもらえばいいんじゃねの
    341 : Name_Not - 2012/01/09(月) 23:00:47.06 ID:??? (-23,-24,-27)
    eval否定ってJSONどーすんだ。
    343 : Name_Not - 2012/01/09(月) 23:06:38.95 ID:??? (+31,+29,-60)
    >>339
    もちろん >>328-329 はかっこに対応してるけど。そういうお題だったから。
    >>341
    別に、ヘンなものがないか検査してからeval()するか、全部自前でパースするか、どっちでも
    いいと思うけど。何も考えずにeval()する奴が叩かれるというだけでしょ。
    345 : Name_Not - 2012/01/09(月) 23:56:15.90 ID:??? (+33,+30,-82)
    JavaScriptでevalを使うなって話は
    Cでgotoを使うなって話に似てる。
    判って使う分には問題ない。
    むしろ、他人の「使うな」って評価を無批判に受け入れちゃう方が問題。
    自分で熟慮して、「使うな」って自分を律する事には口を挟まない。
    347 : Name_Not - 2012/01/10(火) 00:38:58.18 ID:CIijrwn/ (+27,+29,-20)
    (おいおいコイツらいつまでやってんだよさっさと出てけよ・・・)
    348 : Name_Not - 2012/01/10(火) 01:11:44.66 ID:??? (+27,+29,-15)
    evalはフェイルセーフじゃないから好きじゃない
    349 : Name_Not - 2012/01/10(火) 01:18:02.02 ID:??? (-8,+3,-15)
    >>342
    どこにもJSONが見つからないよ
    350 : Name_Not - 2012/01/10(火) 02:09:38.47 ID:??? (-27,-30,-300)
    勉強してていくつか質問
    1.ダブルクオーテーションの中ではシングルクォートを使うってのが分かったんだけど
    更にシングルクォートの中で文字を囲いたいときにはどうするの?
    シングルクォート以降はエスケープってやつをしなきゃいけないの?

    入門書を見ながら勉強してて少しは慣れてきたんだけど
    Jsの書き方のルールに苦戦しててよく間違えてエラーで怒られる。
    2.イコールの後の文字は必ずダブルクオーテーションで囲わないとダメって認識であってる?
    3.下の構文なんだけど同じ「visibility」メソッド?でも後に続くプロパティの間の記号が
    「=」と「:」があるんだけど、どう使い分けたらいいの?
    スタイルシートだからコロンになってるの?
    だとするとそれ以外は全部「=」を使えばOKなの?
    <input type = "button" value = "文章を消す"
    onclick = "document.all('text').style.visiblity = 'visible'">

    <div id = "text2" style = "position:absolute; left30; top:120; color:red;" visibility:hidden;">
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について