Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne nawias kwadratowy itp.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
skowron-line
Witam jako że dupa ze mnie nie znawca wyrażeń regularnych proszę was o pomoc w napisaniu warunku który znajdzie mi coś takiego
Napisałem sobie taką funkcję
[JAVASCRIPT] pobierz, plaintext
  1. function sort(param, value)
  2. {
  3. var url = new URI();
  4. var query = url.get('query');
  5. var newQuery = [], match = 0;
  6.  
  7. var reg = new RegExp("^("+ param +"=)\w{1,}$"); // jakaś moja rzeźba
  8. query.split('&').each(function(item){
  9. if(item.match(reg) != null)
  10. {
  11. item = param +'='+ value;
  12. match = 1;
  13. }
  14. newQuery.push(item);
  15. });
  16. if(match == 0)
  17. {
  18. newQuery.push(param +'='+ value);
  19. }
  20.  
  21. url.set('query', newQuery.join('&'));
  22. url.toURI().go();
  23. }
[JAVASCRIPT] pobierz, plaintext

i teraz chce teraz żeby, wyrażenie znalazło w latających w pętli stringach ciąg podany jako param i dodany do tego znak równości a na końcu w może być coś.

Z góry dziękuje za odpowiedz.
kamil4u
A jakie dane może zawierać zmienna param(liczby, tekst, znaki specjalne)? Najlepiej jak wyalertujesz to co dostajesz z: "^("+ param +"=)\w{1,}$" i nam przedstawisz co tam dostałeś. Jak zawierają się tam znaki specjalne to trzeba dodać przed nimi \. Samo wyrażenie(gdy zmienna parm nie zawiera znaków specjalnych) wygląda poprawnie. A w razie czego je spr. zamieniając parm na jakiś ciąg znaków. Przynajmniej będziesz wiedział czy samo wyrażenie daje Ci to co chcesz smile.gif
skowron-line
Zmienna param znaki alfanumeryczne np.
sort[faculty_id], albo sort[12], albo samo sort
kamil4u
Czyli musisz zamienić te zmienne na np. sort\[faculty_id\], sort\[12\], natomiast samo "sort" powinno już Ci działać. Tak więc użyj przed:
var reg = new RegExp("^("+ param +"=)\w{1,}$"); // jakaś moja rzeźba

Funkcji replace na zmiennej parm i pozamieniaj znaki specjalne dodając przed nimi \, nie zapomnij o fladze "g".

Tu przydatna stronka: http://www.egrafik.pl/kurs-regex-wyrazenia-regularne/ <- masz tam podane znaki specjalne.
skowron-line
[JAVASCRIPT] pobierz, plaintext
  1. function sort(param, value)
  2. {
  3. var url = new URI();
  4. var query = url.get('query');
  5. var newQuery = [], match = 0;
  6.  
  7. var reg = new RegExp("^("+ param +"=)\w{1,}$", "g"); // jakaś moja rzeźba
  8. query.split('&').each(function(item){
  9. if(item.match(reg) != null)
  10. {
  11. item = param +'='+ value;
  12. match = 1;
  13. }
  14. newQuery.push(item);
  15. });
  16. if(match == 0)
  17. {
  18. newQuery.push(param +'='+ value);
  19. }
  20.  
  21. url.set('query', newQuery.join('&'));
  22. url.toURI().go();
  23. }
[JAVASCRIPT] pobierz, plaintext

i wywołanie mam
  1. <select onchange="sort('sort\[faculty_id\]', this.value);">

Ale to nie działa, tak jak powinno.
generalnie powinno zamieniać adres
?abc=a&sort[faculty_id]=12
na
?abc=a&sort[faculty_id]=22
kamil4u
Nienawidzę tych wyrażeń regularnych smile.gif
Znam Cię na tyle, że wiem, że sobie poradzisz smile.gif - proszę:
Kod
<script>
var x = "?abc=a&sort[faculty_id]=12";
var param = "sort\\[faculty_id\\]";
var req = new RegExp("("+param+")=[a-zA-Z0-9_]+", "g");
x = x.replace(req, "$1="+22);
alert(x);
</script>

Jak chcesz tak ja próbowałeś to powinno też chodzić z takim wyrażeniem smile.gif - jak widzisz potrzeba tam dać \\] a nie \] - trochę się pomęczyłem z tym tongue.gif
skowron-line
@kamil4u
[JAVASCRIPT] pobierz, plaintext
  1. var x = "?abc=a&sort[faculty_id]=12";
  2. var param = "sort\\[faculty_id\\]";
  3. var req = new RegExp("("+param+")=[a-zA-Z0-9_]+", "g");
[JAVASCRIPT] pobierz, plaintext

Jak to spiąłem z moim skryptem to pokazało że reg is undefined,

Cytat
Nienawidzę tych wyrażeń regularnych smile.gif
true true smile.gif
kamil4u
Ach...
Kod
<script>
function sort(param, value)
{
   // var url = new URI();  
   // var query = url.get('query');
   var query = "?abc=a&sort[faculty_id]=12";
    var newQuery = [], match = 0;
    
    var reg = new RegExp("("+param+")=[a-zA-Z0-9_]+", "g");
    //query.split('&').each(function(item){
    var y = query.split('&'),item;
    for(item in y){
        if(y[item].match(reg) != null)
        {
            //zamień w param \\ na \;
            y[item] = param +'='+ value;
            match = 1;
        }
        newQuery.push(y[item]);  
    }  
    if(match == 0)
    {
        newQuery.push(param +'='+ value);
    }
    alert( newQuery.join('&') );
}

sort('sort\\[faculty_id\\]', 32);
</script>
skowron-line
@kamil4u ostatecznie zrobiłem tak.
[JAVASCRIPT] pobierz, plaintext
  1. function sort(param, value, allow)
  2. {
  3. if($defined(allow) == false)
  4. {
  5. allow = false;
  6. }
  7.  
  8. var url = new URI();
  9. var query = url.get('query');
  10. var newQuery = [], match = 0, add = true;
  11.  
  12. query.split('&').each(function(item){
  13. if(item.indexOf(param +'=') >= 0)
  14. {
  15. item = param +'='+ value;
  16. if(value == 0 || value == '')
  17. {
  18. if(allow == false)
  19. {
  20. add = false;
  21. }
  22. }
  23. match = 1;
  24. }
  25. if(add == true)
  26. {
  27. newQuery.push(item);
  28. }
  29. });
  30.  
  31. if(match == 0)
  32. {
  33. newQuery.push(param +'='+ value);
  34. }
  35.  
  36. url.set('query', newQuery.join('&'));
  37. url.toURI().go();
  38. }
[JAVASCRIPT] pobierz, plaintext

Oczywiście +1 dla ciebie bo na nikogo innego w JS nie można tu liczyć smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.