-2

regex を使用せずに、文字ではないすべてのもの (abc など) を JS に無視させるにはどうすればよいでしょうか。

Examples
match("abcdef","@C2D!") returns true
match("abcdef","CAfe") returns true
match("abcdef","CG") returns false

これは私がこれまでやってきたことです...

function match(string, pattern) {
    string = string.toLowerCase();
    pattern = pattern.toLowerCase();
    for (var i = 0, l = string.length; i < l; ++i) {
        if(pattern.indexOf(string[i]) === -1) return false;
    }
    return true;
}
alert(match("abcdef", "@C2D!"));

ここでフィドル: http://jsfiddle.net/5UCwW/

4

2 に答える 2

1

次のような正規表現を使用します[^A-Za-z]

var re = /[^A-Za-z]/g;

function match(string, pattern) {
    string = string.toLowerCase();
    pattern = pattern.toLowerCase().replace(re, "");
    for (var i = 0, l = string.length; i < l; ++i) {
        if(pattern.indexOf(string[i]) === -1) return false;
    }
    return true;
}

正規表現なしの関数として

var sanitize = function (str) { 
  var newStr = "", i, charCode;

  for (i = 0; i < str.length; ++i) {
    charCode = str.charCodeAt(i);  
    if (charCode >= 65 && charCode <= 90 ||
        charCode >= 97 && charCode <= 122)  {
      newStr += str[i];
    } 

  return newStr;
}

編集: Az は、大文字の a から小文字の z までの ASCII 値の範囲を使用します。したがって、これには ]、\、[、^、_、および ` が含まれます。これは知らなかった、[A-Za-z] が正しいパターンです。

于 2013-11-09T17:49:36.050 に答える
1

文字列に対して Javascript の組み込みの match メソッドを使用します。

 var mystring = '@C2D!';
 mystring.match(/[^a-zA-Z]/gi).length returns true

 var mystring2 = 'abcdef';
 mystring2.match(/[^a-zA-Z]/gi).length returns false

小文字と大文字を探していると思います。それだけ低い場合は、[^az] を使用します。

一致方法の詳細については、 http ://www.w3schools.com/jsref/jsref_match.asp を参照してください。

于 2013-11-09T17:54:27.537 に答える