Potrivire diacritice

Salut,
Vreau sa introduc intr-un input codul postal automat

$(document).ready(function(){

    var CityJson = [
	 {"county":"Argeş","city":"Burneşti","code":"117651"},
	 {"county":"Argeş","city":"Slănic","code":"117037"},
	 {"county":"Brăila","city":"Brăila", "code":"810001"}
	 
	 ];

    $(".auto_fill").keyup(function(){

		  var county = $('#county').val();		  
		  var city = $('#city').val();
		  
        $.each(CityJson, function(i,v){
            if(county == v.county && city == v.city){
                $("#code").val(v.code);
                return false; // breaks the loop
            }
        });
    });

});

Daca introduc localitatea sau orasul fara diacritice sau il scriu cu litera mica nu functioneaza.
Eu vreau sa caut: braila si sa imi gaseasca codul pentru Brăila.
Cum le pot potrivi ?

Ai nevoie de o normalizare a caracterelor.

'brăila'.normalize('NFD').replace(/[\u0300-\u036f]/g, '') 
# braila

Tu compari ambele variante normalizate:

if( county.noramlize(....) == v.county.normalize(....) && ....) {}

Uite aici o explicație mai detaliată

2 Likes

Poți face inputul pentru localitate un select, sau un autocomplete. Așa eviti si erorile de input, iar apoi nu trebuie sa cauți in lista de coduri poștale pe baza textului, ci pe baza cheii din spate, pe care o assignezi după bunul plac.

Aici găsești un exemplu din Material UI pe care îl poți folosi ca inspirație.

Multumesc

<script>

$(document).ready(function(){

    var CityJson = [
	 {"county":"Argeş","city":"Burneşti","code":"117651"},
	 {"county":"Argeş","city":"Slănic","code":"117037"},
	 {"county":"Brăila","city":"Brăila", "code":"810001"}
	 
	 ];

    $(".auto_fill").keyup(function(){

		  var county = $('#county').val();		  
		  var city = $('#city').val();
		  
        $.each(CityJson, function(i,v){
            if(county.normalize('NFD').replace(/[\u0300-\u036f]/g, '')  == v.county.normalize('NFD').replace(/[\u0300-\u036f]/g, '')  && city.normalize('NFD').replace(/[\u0300-\u036f]/g, '')  == v.city.normalize('NFD').replace(/[\u0300-\u036f]/g, '') ){
                $("#code").val(v.code);
                return false; // breaks the loop
            }
        });
    });

});

</script>
Functioneaza daca incep textul cu litera mare "Braila" 

Mai lipseste sa faci ambele string-uri cu litera mica (sau mare) si faci comparatia intre ele asa:

3 Likes

Cuvantul cheie este localeCompare

 "braila".localeCompare("Brăila", "ro-RO", {sensitivity: 'base', usage: 'search'})

Returneaza 0 pentru egalitate.

4 Likes