JavaScriptで文字列を後ろからx個とってくるには?

[上に] [前に] [次に]
のんち 2000/01/27(木) 20:54:51
sliceで負の数を指定して、後ろから数えるというやり方が
分かりません。
負の数って何を指定すればよいのですか?ご教授お願いします。

↓【例】入力が"html" or "htm" or "/" で終わっていないと入力をはじく
**************  失敗例 1  **********************************
    var tar = document.menu.textbox.value;
    var len = tar.length;
    len *= -1;
    if (tar.slice(len, 1) != "/" && tar.slice(len, 3) != "htm" && tar.slice(len, 4) != "html"){
        window.alert("フルパスもしくはディレクトリで入力して下さい。");
        return false;
    }

**************  失敗例 2  **********************************
    var tar = document.menu.textbox.value;
    var len = tar.length;
    if (tar.slice(-1, 1) != "/" && tar.slice(-1, 3) != "htm" && tar.slice(-1, 4) != "html"){
        window.alert("フルパスもしくはディレクトリで入力して下さい。");
        return false;
    }

zizz... [HomePage] 2000/01/27(木) 21:28:05
上のソースを直すのなら
if (tar.slice(len - 1) != "/" && tar.slice(len - 3) != "htm" && tar.slice(len -4) != "html") {

互換性を気にしないのなら、正規表現を用いたほうが書きやすく見やすい。

のんち 2000/01/27(木) 22:14:03
レスありがとうございます。
>互換性を気にしないのなら、正規表現を用いたほうが書きやすく見やすい。
私のやつは「正規表現」でないですよね??(^^;
例えば・・・どんな感じなんでしょう。

Mugi [E-Mail] [HomePage] 2000/01/27(木) 22:28:29
こうですね。
var tar = document.menu.textbox.value;
if(tar.match(/(html?|\/)$/)==null){alert("エラー")}

正規表現を使わない場合ももう少し簡単にできますよね。
例:
var tar = document.menu.textbox.value;
var tmp
var err=true
//↓最後の文字をチェック
tmp=tar.charAt(tar.length-1)
if(tmp=="/"){err=false}
//↓最後の3文字をチェック
tmp=tar.substring(tar.length-3,tar.length)
if(tmp=="htm"){err=false}
//↓最後の4文字をチェック
tmp=tar.substring(tar.length-4,tar.length)
if(tmp=="html"){err=false}
//↓3つのチェックをしてもエラーフラグがtrueのままならエラー
if(err){alert("エラー")}

のんち 2000/01/27(木) 22:53:06
Mugiさん、
>var tar = document.menu.textbox.value;
>if(tar.match(/(html?|\/)$/)==null){alert("エラー")}
これには感動です!
ありがとうございました。
まめまめやるのは・・・大変ですね。

のんち 2000/01/27(木) 22:53:36
[[解決]]
解決マークつけわすれました。

zizz... [HomePage] 2000/01/28(金) 18:28:18
一応注意。
String.prototype.slice などは、JavaScriptの最初バージョンからあったのに対して、
String.prototype.match は、途中 (JavaScript 1.2) で追加されました。
だから、対応していないバージョンでは、実行するとエラーが発生します。

[上に] [前に] [次に]