Javascript 如何检测非";GSM 7位字母表“;输入字段中的字符

Javascript 如何检测非";GSM 7位字母表“;输入字段中的字符,javascript,regex,gsm,Javascript,Regex,Gsm,我试图检测文本输入字段是否有任何不属于GSM 7位字母表的字符。包含字符的表格在这里 经过大量搜索,我发现这个()非常接近我想要实现的目标,因为它检测非拉丁字符。如何更改正则表达式以包含GSM 7位字母表 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>test foreign chars</title> <

我试图检测文本输入字段是否有任何不属于GSM 7位字母表的字符。包含字符的表格在这里

经过大量搜索,我发现这个()非常接近我想要实现的目标,因为它检测非拉丁字符。如何更改正则表达式以包含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>

测试外来字符
(功能(){
$(“#外来字符”)。在(“keyup”,function()上{
var foreignCharacters=$(“#外来字符”).val();
变量rforeign=/[^\u0000-\u007f]/;
if(外来测试(外来字符)){
警告(“这是非拉丁字符”);
}否则{
警告(“这是拉丁字符”);
}
});
})();

您可以将所有有效字符放入一个字符串中,然后重复搜索该字符串

gsm = "@£$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞ^{}\[~]|€ÆæßÉ!\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
var letter = 'a';
var letterInAlfabet = gsm.indexOf(letter) !== -1;
gsm=“@$$”ùùòòòòòòùòùùùùùòùΔñõ∧∧∧∧∏∑∑Ξ^-/0123456789:;?“ABCDEFGHIjklmnopqrstuvxyzÄÖܧ?ABCDEFGHIjklmnopqrstuvxyzäöñè”;
var字母='a';
var LETTINALFABET=gsm.indexOf(字母)!=-1;
如果使用此选项,请确保编码正确,即将Javascript文件保存为UTF8,并在浏览器中指定为UTF8

函数isGSMAlphabet(text){
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);
}
“新regexp=新regexp=新regexp(“^[A-A-A-Za-z0-8-9\\r\\n目前,,,,[249 9日日))若若若若若若上述上述两个月月内,将将从新regexp=新regexp((^[A[A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-u20AC]*$”; 返回regexp.test(文本); }

这个正则表达式应该可以解决您的问题。

我有id为
smscontent
textarea
。我使用下面的正则表达式/代码

$('#smscontent').on('input, change keyup', function(){
    $(this).val($(this).val().replace(/[^A-Za-z0-9 \r\n@£$¥!\"#$%&amp;'\(\)*\+,_.\/:;&lt;=&gt;?^{}\\\[~\]]*/ig, ''));
});
要测试Lajos共享的正则表达式-


要测试此答案中使用的正则表达式-

接受的答案将起作用,但它们会受到复杂性(使用正则表达式)和性能(需要搜索两个数组)的影响。这是一个性能更好的解决方案,因为使用了查找集,如果找到非GSM7字符,循环将短路。使用Unicode点是为了在剪切和粘贴此代码时不出现不同字符编码的问题

const gsmCodePoints=新集合([
0x000a、0x000c、0x000d、,
0x0020、0x0021、0x0022、0x0023、0x0024、0x0025、0x0026、0x0027、0x0028、0x0029、0x002a、0x002b、0x002c、0x002d、0x002e、0x002f、,
0x0030、0x0031、0x0032、0x0033、0x0034、0x0035、0x0036、0x0037、0x0038、0x0039、0x003a、0x003b、0x003c、0x003d、0x003e、0x003f、,
0x0040、0x0041、0x0042、0x0043、0x0044、0x0045、0x0046、0x0047、0x0048、0x0049、0x004a、0x004b、0x004c、0x004d、,
0x004e,0x004f,
0x0050、0x0051、0x0052、0x0053、0x0054、0x0055、0x0056、0x0057、0x0058、0x0059、0x005a、0x005b、0x005c、0x005d、0x005e、0x005f、,
0x0061、0x0062、0x0063、0x0064、0x0065、0x0066、0x0067、0x0068、0x0069、0x006a、0x006b、0x006c、0x006d、0x006e、0x006f、,
0x0070、0x0071、0x0072、0x0073、0x0074、0x0075、0x0076、0x0077、0x0078、0x0079、0x007a、0x007b、0x007c、0x007d、0x007e、,
0x00a1、0x00a3、0x00a4、0x00a5、0x00a7、,
0x00bf,
0x00c4、0x00c5、0x00c6、0x00c7、0x00c9、,
0x00d1、0x00d6、0x00d8、0x00dc、0x00df、,
0x00e0、0x00e4、0x00e5、0x00e6、0x00e8、0x00e9、0x00ec、,
0x00f1、0x00f2、0x00f6、0x00f8、0x00f9、0x00fc、,
0x0393、0x0394、0x0398、0x039b、0x039e、0x03a0、0x03a3、0x03a6、0x03a8、0x03a9、,
0x20ac,
]);
函数isGsmMessage(消息){
for(信息量){
const codePoint=s.codePoint(0);
if(codePoint&!gsmCodePoints.has(codePoint)){
返回false;
}
}
返回true;
}
isGsmMessage('foo');//->真的

isGsmMessage('⚡️ 目前我正在使用的bar-bar我正在使用的RfForForForeign=“^[A-A-Za-Za-Za-z0-9\\r\\n(r)n,,{249 9 9 9月日我正在使用的bar我正在使用的bar我正在使用的bar我正在使用的bar-bar我正在使用的bar-bar我正在正在使用的10.5.5 5月月10 10 10 10 10日日日日日日日日日日,本本本州州州9 9 9 9 9月19 19 19 19日9 9月9 9 9 9 9 9日,本本本本州9月19 19日若若若若若要是要是要是要是要是要是要是要是要是要是要是要是要是要是10月10 10月10日日日10月10月10月10日除了除了除了除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除$”,我得到一个错误“rforeign.test不是函数“正则表达式是可以的,但您使用的是错误的。请使用
var rforeign=/regex/;
var rforeign=new RegExp(“regex”);
。这在javascript中不起作用。使用的代码:函数containsalsallascii(str){return/^[A-Za-z0-9\r\n@$ùùòòùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù249正则表达式缺少字符\u00a4三重转义反斜杠“\\\\\\\\\\”的用途是什么?我现在就检查它,因为正则表达式对我不起作用。所以我必须根据这个gsm变量逐个检查所有字符。你能回答吗?字母“A”返回true,字符串“AD”“返回false。据我所知,我必须循环每个字符并检查gsm字符串。我如何做?
for(var I=0;I
您缺少空格和换行符。