2017-11-06 17 views
1

私のデータをフィルタで検索しています。トルコ文字を入力するとうまくいきません。このコードを変更するにはどうすればよいですか?Jqueryの正規表現でトルコ文字を検索する

var $rows = $('#tableExport tr'); 
$('#search').keyup(function() { 
    var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$', 
     reg = RegExp(val, 'i'), 
     text; 

    $rows.show().filter(function() { 
     text = $(this).text().replace(/\s+/g, ' '); 
     return !reg.test(text); 
    }).hide(); 
}); 

これらは、ここでの文字c、I、G、O、S、U、C、I、G、O、S、Ü

+0

可能であれば、完全なコードを投稿できますか? –

+0

たとえば、İçAnadoluを検索すると表示されません。しかし、htmlテーブルにはその値が含まれています。またはイスタンブールの場合は同じです。 –

+0

イスタンブールやIc Anadoluを書いても動作しません。 –

答えて

1

あり、2つの問題がある:1)\bではありませんUnicode対応であり、2)iは、大文字と小文字を区別しないパターンで使用される場合、点線の対応ではなくドットなしのIにのみ一致します。

私は、1)空白の境界、または2)ASCII文字の文字列+トルコ文字の境界の2つのシナリオを提案します。

パターンは非常に似ています。ここで

var val = '^(?=.*(?:^|\\s)(?:' + $.trim($(this).val()).split(/\s+/).join('|') + ')(?!\\S))', 
    reg = RegExp(val.replace(/[İi]/ig, '[iİ]'), 'i'), 

は、パターンが/^(?=.*(?:^|\s)(?:[iİ]ç|Anadolu)(?!\S))/iのようになります。ここでは、空白の境界ベースのコードの例です。 .replace(/[İi]/ig, '[iİ]')は、ドットのİiと一致させることができます。

他のアプローチは、我々はトルコ語の文字とASCII文字・ワード(\wを)否定前後参照して\bを交換する必要があることを意味:ここで

var val = '^(?=.*(?:^|[^\\wçığöşüÇİĞÖŞÜ])(?:' + 
    $.trim($(this).val()).split(/\s+/).map(function(x) { 
     return x.replace(/[İi]/ig, '[iİ]'); 
    }).join('|') + ')(?![\\wçığöşüÇİĞÖŞÜ]))', 
    reg = RegExp(val, 'i'), 

、パターンが/^(?=.*(?:^|[^\wçığöşüÇİĞÖŞÜ])(?:[iİ]ç|Anadolu)(?![\wçığöşüÇİĞÖŞÜ]))/iのようになりますし、安全にマッチします非単語または非トルコ語の文字の間の用語。

+0

ありがとうございます。 –

関連する問題