Fevelix Posted October 7, 2015 Report Share Posted October 7, 2015 Meklēju google preg_replace bet galu galā smadzenes samežģijas! xD vajadzētu no teksta izvilkt 8 ciparu skaitli un parveidot to par linku. Piem. $value = "Text text 15100401 text text text 15100402 text......" skaitļus "15100401" un "15100402" vēlētos pārveidot par <a href="/?id=15100401">15100401</a>, <a href="/?id=15100402">15100402</a> $value = "Text text <a href=\"/?id=15100401\">15100401</a> text text text <a href=\"/?id=15100402\">15100402</a> text......"; Lasot par preg_replace iespējām un izmeiģinot smadzenes samežģijās! :D +1 kas izlīdzēs! :) Quote Link to comment Share on other sites More sharing options...
jurgenzz Posted October 7, 2015 Report Share Posted October 7, 2015 (edited) PHP nemāku, bet te būs JS funkcija, kas visus 8 ciparu skatiļus pārveidos par linkiem. // paraugteksts var string = 'this is some random text 12313132 asdasd 123123 asd123 ads 1231231 12345678'; // return katru, kas ir cipars un tieši 8 function convertToLink(arr, fn) { var newArr = []; for (var i = 0; i < arr.length; i++) { if (!isNaN(arr[i])) { if (arr[i].length === 8) { newArr.push( fn(arr[i]) ); } } }; return newArr; } // sasplitojam stringu var splitString = string.split(' '); // saucam funkciju, un katru atrasto 8 ciparu numuriņu pārvēršam par linku var arr2 = convertToLink(splitString, function (item) { var link = '<a href="' + item + '">' + item + '</a>'; return string.replace(item, link) }); //console console.log(arr2); Gan jau var vēl labāk šito uzrakstīt :P Palasīju preg_replace(), joprojām no php neko nesaprotu, bet interesē vai kāds gudrāks pateiks, vai es pareizi sapratu: // paņemam visus nomuriņus no stringa $re = "/[0-9]+/"; // example string $str = "asdads 123 123123 1231231231 12345678 kajsdh"; // tagad visam vajadzētu būt iekš $matches? preg_match_all($re, $str, $matches); //vajag labu for loopu, kur katrs patterns tiek nomainīts pret match utt for (i = 0; i < $matches.length; i++) { if ($matches[i].length == 8) { $patterns = String() // ? $pattern = $matches[i]; // 8 ciparu skaitlis no $match(?) $replacement = String() // ? $replacement = '<a href="' + $matches[i] + '">' + $matches[i] + '></a>'; echo preg_replace($pattern, $replacement, $string); } } Edited October 7, 2015 by jurgenz Quote Link to comment Share on other sites More sharing options...
Wuu Posted October 8, 2015 Report Share Posted October 8, 2015 <?php $text = "Welcome to RegExr v2.0 by gskinner.com! Edit the Expression & Text to see matches. Roll over matches or the expression for details. Undo mistakes with ctrl-z. Save & Share expressions with friends or the Community. A full Reference & Help is available in the Library, or watch the video Tutorial. Sample text for testing: abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 +-.,!@#$%^&*();\/|<>\"' 12345999999999999 -98.7 3.141 .6180 9,000 +42 555.123.4567 +1-(800)-555-2468 foo@demo.net bar.ba@test.co.uk www.demo.com http://foo.co.uk/ http://regexr.com/foo.html?q=bar"; echo preg_replace("/[0-9]{8}/",'<a href="/?id=$0">$0</a>', $text); ?> http://www.regexr.com/ Quote Link to comment Share on other sites More sharing options...
jurgenzz Posted October 8, 2015 Report Share Posted October 8, 2015 (edited) Bet šis regex paņems arī 9, 10 un 20 ciparu skaitļus, ne? t.i., ja būs piemēram 1234567890, viņš paņems 12345678 un atstās 90? Edited October 8, 2015 by jurgenz Quote Link to comment Share on other sites More sharing options...
Wuu Posted October 8, 2015 Report Share Posted October 8, 2015 (edited) Rezultāts. Vari izpētīt. http://regexr.com/3bukm Edited October 8, 2015 by Wuu Quote Link to comment Share on other sites More sharing options...
jurgenzz Posted October 8, 2015 Report Share Posted October 8, 2015 Es saprotu, ka šis darbojas baigi smuki Wuu, mans jautājums ir, ja tagad visus 8 ciparu skaitļus pārvēršam par linkiem, bet te pēkšņi ir visa teksta vidū būs piemēram telefona numuriņš +37122002138, kas pārvērtīsies par +<a href="37122002">37122002</a>138? Quote Link to comment Share on other sites More sharing options...
Леший Posted October 8, 2015 Report Share Posted October 8, 2015 Imho, lai paredzētu visus gadījumus, piemēram "asdf 12341234 qwer 56785678. 12341234asdf", būtu vieglāk sadalīt pa vārdiem, iziet cauri masīvam, tad atkal salīmēt rindā. Un [0-9]{8} vietā var izmantot smukāku \d{8}. Quote Link to comment Share on other sites More sharing options...
Wuu Posted October 8, 2015 Report Share Posted October 8, 2015 Es saprotu, ka šis darbojas baigi smuki Wuu, mans jautājums ir, ja tagad visus 8 ciparu skaitļus pārvēršam par linkiem, bet te pēkšņi ir visa teksta vidū būs piemēram telefona numuriņš +37122002138, kas pārvērtīsies par +<a href="37122002">37122002</a>138? Jā, telefona numurs tiks pārveidots. Risinājums ir paredzēts Fevelix piemēram. Imho, katram uzdevumam, savs risinājums. Ja tev interesē kas cits, jautā. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 8, 2015 Report Share Posted October 8, 2015 (edited) $text = 'wharblgarbl, 12345678, more text goes here, +37126123456.'; echo preg_replace('/\b(\d{8})\b/', '<a href="/?id=$1" target="_blank">$1</a>', $text); Ja tev visi tie ID sākas ar "1510", tad to regex var pielāgot uz '/\b(1510\d{4})\b/'. @Jurgenz - JS ekvivalents: var text = 'wharblgarbl, 12345678, more text goes here, +37126123456.'; alert(text.replace(/\b(\d{8})\b/g, '<a href="/?id=$1" target="_blank">$1</a>')); // JS vajag /g flagu, PHP tas ir implicit Edited October 8, 2015 by jurchiks Quote Link to comment Share on other sites More sharing options...
Kavacky Posted October 9, 2015 Report Share Posted October 9, 2015 būtu vieglāk sadalīt pa vārdiem, iziet cauri masīvam, tad atkal salīmēt rindā++ Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 9, 2015 Report Share Posted October 9, 2015 Tā būtu mikrooptimizācija. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted October 9, 2015 Report Share Posted October 9, 2015 > būtu vieglāk sadalīt pa vārdiem, iziet cauri masīvam, tad atkal salīmēt rindā > Tā būtu mikrooptimizācija. Tu saproti ka tas būtu lēnāk? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 9, 2015 Report Share Posted October 9, 2015 @daGrevis - kam tu to tagad saki? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted October 9, 2015 Report Share Posted October 9, 2015 Tev. Tā nav mikrooptimizācija ja kods paliks lasāmāks un lēnāks. Quote Link to comment Share on other sites More sharing options...
briedis Posted October 9, 2015 Report Share Posted October 9, 2015 Yeah, piekrītu, ka vienas rindiņas regex nekādu papildus vērtību nesniedz. Vieglāk un skaidrāk ir sasplitot un iziet visam cauri. + var papildus darbības veikt, kā ģenerēt urli normālā veidā (no route'a), nevis visu embedot vienā regexā. Labi, sūds vēl ar skaitļiem, bet ja tur būtu citi simboli, tad vēl vajag urlencodēt, ko regexā arī sūdīgi izdarīt. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.