Jump to content
php.lv forumi

Preg_replace 8digit number replace


Fevelix

Recommended Posts

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! :)

Link to comment
Share on other sites

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 by jurgenz
Link to comment
Share on other sites

<?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/

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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ā.

Link to comment
Share on other sites

$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 by jurchiks
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...