12

テキスト入力フィールドに GSM 7 ビット アルファベットに属さない文字があるかどうかを検出しようとしています。文字の表はこちらhttp://www.dreamfabric.com/sms/default_alphabet.html

何度も検索した後、これを見つけました(非ラテン文字を確認するには、どの正規表現が必要ですか?)これは、非ラテン文字を検出するため、達成したいことにかなり近いものです。GSM 7 ビット アルファベットを含むように正規表現を変更するにはどうすればよいですか?

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>test foreign chars</title>
</head>
<body>

    <input id="foreign_characters" size="12" type="text" name="foreign_characters" value="test">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">

(function(){

    $('#foreign_characters').on("keyup", function(){

        var foreignCharacters = $("#foreign_characters").val();
        var rforeign = /[^\u0000-\u007f]/;

        if (rforeign.test(foreignCharacters)) {
          alert("This is non-Latin Characters");
        } else {
          alert("This is Latin Characters");
        }

    });

})();

    </script>
</body>
</html>
4

4 に答える 4

21
function isGSMAlphabet(text) {
    var regexp = new RegExp("^[A-Za-z0-9 \\r\\n@£$¥èéùìòÇØøÅå\u0394_\u03A6\u0393\u039B\u03A9\u03A0\u03A8\u03A3\u0398\u039EÆæßÉ!\"#$%&'()*+,\\-./:;<=>?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[~\\]|\u20AC]*$");

    return regexp.test(text);
}

この正規表現はあなたの問題を解決するはずです。

于 2012-10-01T12:26:18.157 に答える
12

すべての有効な文字を文字列に入れ、その文字列を繰り返し検索できます。

gsm = "@£$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞ^{}\[~]|€ÆæßÉ!\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
var letter = 'a';
var letterInAlfabet = gsm.indexOf(letter) !== -1;

これを使用する場合は、エンコーディングが正しいことを確認してください。つまり、Javascript ファイルを UTF8 として保存し、それが UTF8 であることをブラウザに指定します

于 2012-10-01T12:26:08.243 に答える