JavaScriptで全角文字の判定をするには?

[上に] [前に] [次に]
モルモン卿 1998/12/08(火) 19:27:45
JavaScriptで「ある文字列が全角文字のみで構成されているか?」を判定するにはどうしたらいいのでしょうか?
Win/Mac、IE/NNを問わない方法があったら教えてください。

Aurai [E-Mail] 1998/12/09(水) 01:23:00
アスキーキャラを全て検索してみるとか……

まる高 [E-Mail] [HomePage] 1998/12/09(水) 09:32:30
前にもこんな質問がありましたね。
長いですけど、↓を使ってみてください。この位のコードを書かなければ対処できないと
思います。

/**********************************************************************
*  処理 :漢字判定のセット                                            *
*      true    : " " 以上                                          *
**********************************************************************/
function JudgeKanji( Object ){

        var Count ;
        var String ;

        String = Object.value ;

        // Explorerの時、
        if( navigator.appName == "Microsoft Internet Explorer" ){
                return JudgeKanji_IE( String ) ;
        }
        // Netscapeの時、
        else{
                return JudgeKanji_Netscape( String ) ;
        }
}

function JudgeKanji_IE( String ){

        var Count ;
        var Letter ;

        for( Count=0; Count < String.length; Count++ ){
                Letter = String.charAt( Count ) ;
                if( Letter < " "  && Letter != '\n' && Letter != '\r' )
                        return false ;
        }

        return true ;
}

function JudgeKanji_Netscape( String ){

        var Count ;
        var Letter ;
        var kl ;

        kl = Klength( String ) ;

        for( Count=0; Count < kl; Count++){
               Letter = KcharAt( String,Count );
                if( Letter < " "  && Letter != '\n' && Letter != '\r' )
                        return false ;
        }

        return true ;
}


function Klength( String ){

var Count ;
var Length ;
var Letter, LetterBin ;

Length = 0 ;

for( Count=0; Count < String.length; Count++ ){
Letter = escape( String.charAt( Count ) ) ;
LetterBin = eval( "0x"+Letter.charAt( 1 ) ) ;

if ((LetterBin==8) || (LetterBin==9) || (LetterBin==14) || (LetterBin==15) ) Count++ ;

Length++ ;
}

return Length ;
}

// 指定1文字取得(Shift JIS)
function KcharAt( String,Position ){

var Length ;
var Count ;
var CutString ;
var Letter, LetterBin ;

Length = 0 ;

for( Count=0; Count < String.length; Count++ ){
CutString = String.charAt( Count ) ;

Letter = escape( CutString ) ;
LetterBin = eval( "0x"+Letter.charAt( 1 ) ) ;

if( (LetterBin==8) || (LetterBin==9) || (LetterBin==14) || (LetterBin==15) ){
CutString = CutString+String.charAt( Count+1 ) ;
Count++ ;
}

if( Position==Length ) break ;

Length++ ;
}

return CutString ;
}

モルモン卿 1998/12/09(水) 20:10:17
ありがとうございます。
でも、まる高さんのスクリプトだと、ネコミ4.05が常にtrueを返してしまうのですが・・・

まる高 1998/12/10(木) 12:06:21
あひゃ。じゃ、↓のように変更してみてください
function JudgeKanji_Netscape()の
if( Letter < " " && Letter != '\n' && Letter != '\r' )

if( (Letter < " " || Letter.length==1) && Letter != '\n' && Letter != '\r' )
に置き換えてください

モルモン卿 1998/12/10(木) 15:28:32
できました!ありがとうごいますざいます!

でも・・・・たびたび申し訳ないのですが、
半角カタカナがNNだと半角として扱われ、
IEだと全角になってしまいます。
半角カタカナの判定はどうすればいのでしょうか?

やす ~y(^o^)oO○ 1998/12/11(金) 01:39:34
>半角カタカナがNNだと半角として扱われ、
>IEだと全角になってしまいます。
>半角カタカナの判定はどうすればいのでしょうか?
IEだとソース表示でみたら化けてません?
これってEUCコードだと思うのですが・・・
NNは持ってきたときにSJISに変換してる(と思う)
EUCコードは半角カナが2バイトなのでこうなっちゃうんじゃないでしょうか?
ホームページをSJISで書いてみたらどうでしょう?

モルモン卿 1998/12/11(金) 09:52:17
その通り、EUCです。
でも、DB周りの事情があってEUCでなければならないのです・・・
なんかいい解決策はないものでしょうか?

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