Preg replace behalve .filename en -

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

Bekijk vacature »

Donny Wie weet

Donny Wie weet

08/08/2015 19:40:46
Quote Anchor link
Heyyy allemaal,

Ik ben er zo slecht in: preg_replace()... Eerste tip die jullie zullen geven: WORD BETER IN PREG_REPLACE! Top, dat had ik al door :P

Hoe kan ik een filename zo krijgen, dat de bestandsnaam nog wel .filename bevat, maar de rest van de special chars vervangen worden met dashed (-)?
 
PHP hulp

PHP hulp

25/04/2019 04:55:11
Honeypot
 
Wouter J

Wouter J

08/08/2015 20:05:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

trim(preg_replace('/[^:alnum:.]+/', '-', $filename), '-');

?>


/.../ aanduiding van een PCRE pattern
[^...] [] is een character class, een verzameling tekens die vervolgens gematched worden (doordat we met ^ beginnen betekend het *niet* gematched worden)
:alnum: alle letters en cijfers
[^:alnum:.]+ match alles wat geen letter, cijfer of punt (.) is en doe dit 1 of meer keer (+). Zo wordt "foo & bar.png" niet "foo---bar.png", maar "foo-bar.png"

De trim is vervolgens nodig om de dash voor en achter te verwijderen, in het geval de filename "&foo.png" was (wat zonder trim resulteert in "-foo.png").
 
Johan K

Johan K

08/08/2015 20:09:05
Quote Anchor link
Kijk eens even op http://regexr.com/
Ik ben zelf ook geen held dat ik regex code uit mijn hoofd kan schrijven, maar met deze website krijg ik altijd het wel voor elkaar wat ik wil hebben.

Wat jij wil, is een "not word" en dat is "\W" daarbij geef je aan dat je niet "." wil converteren dus dan gebruik je de NOT operator in regex "(?![])" Aangezien een . een speciale karakter is, escapen met "\".

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
  # om maar even de code van boven te "lenen".
  trim(preg_replace('/(?![\.])\W/', '-', $filename), '-');
  trim(preg_replace('/(?![\.])\W+/', '-', $filename), '-'); // multiline

?>
Gewijzigd op 08/08/2015 20:19:11 door Johan K
 
Stefan Fransen

Stefan Fransen

08/08/2015 20:20:41
Quote Anchor link
edit: zie bij bovengenoemde oplossingen alleen een probleem namelijk dat een . ook een symbool is dat kan worden gebruikt en deze moet er ook uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$string
= "Test. nummer #1.png";
$ext = substr($string, strrpos($string, '.'));
$name = preg_replace("/[^A-Za-z0-9]/", '-', substr($string, 0, strrpos($string, '.')));
echo $name . $ext;
// output Test--nummer--1.png

$string = "Test. nummer #2.png";
$ext = substr($string, strrpos($string, '.'));
$name = preg_replace("/[^A-Za-z0-9 ]/", '', substr($string, 0, strrpos($string, '.')));
$name = preg_replace("/[^A-Za-z0-9]/", '-', $name);
echo $name . $ext;
// output Test-nummer-2.png
?>
Gewijzigd op 08/08/2015 20:26:51 door Stefan Fransen
 
Johan K

Johan K

08/08/2015 20:39:28
Quote Anchor link
Wel grappig, 3 posts 3 verschillende regexes die hetzelfde doen. Alleen zo te zien haalt die van Stefan ook de dubbele symbolen eruit, dat kan deze ook.

'/(?![\.])(\W)+/'

Het enigeste qua efficientcy zal ik deze functies gebruiken i.p.v. substrings of explodes.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 $path_parts
= pathinfo($filename, PATHINFO_FILENAME | PATHINFO_EXTENSION);
 echo $path_parts['extension'], "\n";
 echo $path_parts['filename'], "\n"; // since PHP 5.2.0


 $path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

 echo $path_parts['dirname'], "\n";
 echo $path_parts['basename'], "\n";
 echo $path_parts['extension'], "\n";
 echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>


Volgens mij kan dat ook volledig met regex, maar dat gaat mij een niveautje te hoog maar dit zou prima moeten werken.
Gewijzigd op 08/08/2015 20:44:04 door Johan K
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.