2017-11-06 5 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(); 
}); 

는 문자 ç이다, 나는, G는 O, S는 유, Ç, 나는, G, O, S, 여기 Ü

+0

가능한 경우 전체 코드를 게시 할 수 있습니까? –

+0

예를 들어 İç Anadolu를 검색하면 표시되지 않습니다. 그러나 html 테이블에는 그 값이 들어 있습니다. 또는 İstanbul와 동일합니다. –

+0

이스탄불이나 IC Anadolu를 쓸 때도 작동하지 않습니다. –

답변

1

, 두 가지 문제가있다 : 1) \b은 아니다 유니 코드 인식 및 2) i은 대/소문자를 구분하지 않는 패턴으로 사용할 경우 점으로 구분 된 부분이 아닌 점으로 구분되지 않는 I과 일치합니다.

나는 1) 공백 경계 또는 2) ASCII 단어 문자 + 터키 문자 기반 경계라는 두 가지 시나리오를 제안합니다.

패턴이 매우 유사합니다. 다음은 공백 경계 기반 코드의 예입니다.

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의 일치를 허용합니다. 패턴이 /^(?=.*(?:^|[^\wçığöşüÇİĞÖŞÜ])(?:[iİ]ç|Anadolu)(?![\wçığöşüÇİĞÖŞÜ]))/i 모양을 여기

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

하고 안전하게 일치합니다 :

다른 방법은 우리가 터키 편지와 함께 ASCII 단어 문자 (\w)를 부정 lookaround로 \b를 교체해야 의미 비 단어 또는 비 터키어 문자 사이의 용어.

+0

정말 고맙습니다. –