In aceasta pagina e prezentata o clasa ce poate fi utilizata in JavaScript pentru impartirea /separarea unui sir alfanumeric (un sir cu mai multe sub-siruri de forma: "Nume Numar", separate printr-un anumit caracter).
Aceasta clasa contine o metoda ce separa "Nume" de "Numar" si le adauga separat intr-un obiect cu doua array-uri, in ordinea lor din sir.
- Vedeti exemplele si comentariile din cod.
Codul clasei
// clasa pt impartire sir Alfanumeric, de la: http://discant.ro/javascript/
function splitStr() {
/*
- $str = sirul alfanumeric,
- $dlm1 = caracterul ce separa Nume de Numar
- $dlm2 = caracterul ce separa perechile de sub-siruri: "Nume Numar"
Un sir in felul acesta:
"Nume[$dlm1]Numar[$dlm2]Nume[$dlm1]Numar"
- caracterele de separare ($dlm1, si $dlm2) pot fi orice caracter, de exemplu: spatiu, liniuta, punct, virgula, etc.
Aceasta metoda returneaza un obiect cu 2 array ('name' si 'num'), cu Nume si Numar din $str separate, in ordinea lor din sir
*/
this.splitNameNumber = function(str, dlm1, dlm2) {
// JavaScript-jQuery course: http://discant.ro/javascript/
// si cu caractere ce trebuie escapate (cu '\') in RegExp
var chrs = '.()[]<>?\'^*-+\\/';
if(chrs.indexOf(dlm1) != -1) dlm1 = '\\'+dlm1;
if(chrs.indexOf(dlm2) != -1) dlm2 = '\\'+dlm2;
// seteaza sablonul RegExp folosit pt separare Nume, Numar si sub-siruri
var patt1 = new RegExp('([a-z \\._\\-'+ dlm1 + dlm2+ ']+[0-9]+)', 'ig');
var patt2 = new RegExp('([a-z \\._\\-'+ dlm1+ ']+)([0-9]+)', 'ig');
var substr = str.split(patt1); // array cu sub-siruri
if(substr != null && substr != '') {
var re = {"name":[], "num":[]}; // variabila pt datele care vor fi returnate
var ir = 0; // pt definire index elemente in re
nrsubstr = substr.length; // number of matched substrings
// parcurge sub-sirurile gasite
for(i=0; i<nrsubstr; i++) {
// daca nu e gol
if(substr[i] != '') {
var name_num = substr[i].split(patt2); // array cu Nume si Numar separate din sub-sirul curent
// adauga Nume si Numar separate in array-urile din obiectul din re
if(name_num != '') {
re['name'][ir] = trim(trim(name_num[1], dlm1));
re['num'][ir] = name_num[2];
ir++;
}
}
}
return re;
}
else return false;
}
// functie pt stergere anumite caractere de la inceputul si sfarsitul unui sir
var trim = function(str, chr) {
var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g') : new RegExp('^'+chr+'+|'+chr+'+$', 'g');
return str.replace(rgxtrim, '');
}
}
Ca sa folositi aceasta clasa, trebuie mai intai creat un obiect la ea, cu sintaxa:
var numeObiect = new splitStr();
Apoi se acceseaza metoda splitNameNumber(), transferand la argumente sirul si caracterele de delimitare
var obNameNums = numeObiect.splitNameNumber(str, dlm1, dlm2);
• Iata un exemplu practic de utilizare a acestei clase.
In acest exemplu se foloseste metoda splitNameNumber() pentru a separa Nume si Numar din sirurile adaugate in trei DIV-uri. Cand se apasa clic pe un buton cu eveniment onclick asociat cu un DIV, este creat si afisat un tabel HTML cu Numele si Numerele din acel DIV.
- Ca sa fie preluat sirul, creat si afisat tabelul HTML, este definita o alta functie care foloseste obiectul cu array-urile returnate de metoda splitNameNumber() a clasei "splitStr".
// Sirul-1 cu Nume si Numar separate prin punct '.', si sub-sirurile separate prin virgula ','
<div id="exstr1" style="margin:0 0 1em 3em;color:blue;">Curs JavaScript-jQuery.2013, discant.ro.2011, discant.ro.2009</div>
// Sirul-2 cu Nume si Numar separate prin spatiu, si sub-sirurile separate prin virgula ','
<div id="exstr2" style="margin:0 0 1em 3em;color:#00cb01;">Code Snippets 12, Cod JavaScript 2011, discant.ro Courses 2009</div>
// Sirul-3 cu Nume si Numar, si sub-sirurile separate prin spatiu
<div id="exstr3" style="margin:0 0 1em 3em;color:blue;">Tutoriale PHP_MySQL 23 Lectii Ajax 9 Web Development 2013</div>
<button id="exbtn1">Sirul-1</button> - <button id="exbtn2">Sirul-2</button> - <button id="exbtn3">Sirul-3</button>
<div id="tbstr">Aici e afisat tabelul cu Nume si Numar din siruri.</div>
<script type="text/javascript">
// AICI se adauga clasa splitStr
// primeste ID-ul elementului HTML cu sirul, si caracterele ce imart Nume-Numar si sub-siruri
// creaza si afiseaza un tabel HTML
function reTable(idstr, dlm1, dlm2) {
// preia sirul
var str = document.getElementById(idstr).innerHTML;
// creaza un obiect cu clasa splitStr si foloseste metoda splitNameNumber()
var obSplitStr = new splitStr();
var split_str = obSplitStr.splitNameNumber(str, dlm1, dlm2);
var nrcol = split_str['name'].length;
var htmltb = '<table cellpadding="2" cellspacing="0" border="1" style="margin:1em auto;border-color:#0001da;"><caption><b>'+idstr+'</b></caption><tr><th>Nume</th><th>Numar</th></tr>';
// adauga datele din array-urile din split_str in tabelul HTML
for(var i=0; i<nrcol; i++) {
htmltb += '<tr><td>'+ split_str['name'][i] +'</td><td>'+ split_str['num'][i] +'</td></tr>';
}
// adauga tabelul HTML in elementul cu id="tbstr"
document.getElementById('tbstr').innerHTML = htmltb +'</table>';
}
// inregistreaza eveniment onclick la cele 3 butoane
document.getElementById('exbtn1').onclick = function() { reTable('exstr1', '.', ','); }
document.getElementById('exbtn2').onclick = function() { reTable('exstr2', ' ', ','); }
document.getElementById('exbtn3').onclick = function() { reTable('exstr3', ' ', ' '); }
</script>
Ca sa vedeti rezultatul, clic pe butoanele de mai jos.
// Sirul-1 cu Nume si Numar separate prin punct '.', si sub-sirurile separate prin virgula ','
Curs JavaScript-jQuery.2013, discant.ro.2011, discant.ro.2009
// Sirul-2 cu Nume si Numar separate prin spatiu, si sub-sirurile separate prin virgula ','