Eerste woord verwijderen/woord voor -
Ik heb in m'n database een lap tekst, welke begint met een plaatsaanduiding (zijn nieuwsartikelen) a la 'PLAATSNAAM -'. Nu wil ik dat die plaatsnaam een bepaalde stijl heeft. Via CSS is het me niet gelukt en kon ik online ook niets vinden.
Daarom had ik het volgende:
Code (php)
Echter gaat dat in sommige gevallen mis. Sommige artikelen hebben geen plaatsaanduiding, of hebben een plaatsaanduiding waarvan de plaats uit twee 'woorden bestaat' (DE PLAATS -). Ik heb echter geen idee hoe ik dat moet opvangen.. De syntax is wel vast 'PLAATSNAAM - '.
Hierna bevat $content[0] de plaatsnaam en $content[1] de rest van het bericht.
Deze kun je vervolgens recombineren met extra CSS, bijvoorbeeld:
Code (php)
1
2
3
4
2
3
4
<?php
$content = explode(' - ', $content, 2);
$content = '<span class="plaatsnaam">' . $content[0] . '<span> - ' . $content[1];
?>
$content = explode(' - ', $content, 2);
$content = '<span class="plaatsnaam">' . $content[0] . '<span> - ' . $content[1];
?>
Ward van der Put op 24/01/2017 15:15:39:
en $content[1] de rest van het bericht.
Uiteraard alleen als er niet nog een - in voorkomt.
- SanThe - op 24/01/2017 15:20:59:
Uiteraard alleen als er niet nog een - in voorkomt.
Inderdaad.. ik had ook al gedacht aan een selectie op het streepje, maar dan loop ik hier tegenaan...
Jelle Hi op 24/01/2017 15:30:04:
Inderdaad.. ik had ook al gedacht aan een selectie op het streepje, maar dan loop ik hier tegenaan...
- SanThe - op 24/01/2017 15:20:59:
Uiteraard alleen als er niet nog een - in voorkomt.
Inderdaad.. ik had ook al gedacht aan een selectie op het streepje, maar dan loop ik hier tegenaan...
Nee hoor, daarom heb ik (a) de derde parameter $limit van explode() op 2 gezet, zodat je maar 2 array-elementen krijgt, en (b) de string gesplitst op ' - ' in plaats van '-', zodat plaatsnamen met een - worden genegeerd. Uiteraard kan er dan altijd nog een uitzonderingsgeval optreden, maar daarvoor kun je dan nog een nette exception inbouwen.
Gewijzigd op 24/01/2017 15:53:10 door Ward van der Put
Ward van der Put op 24/01/2017 15:52:31:
... daarom heb ik (a) de derde parameter $limit van explode() op 2 gezet, zodat je maar 2 array-elementen krijgt ...
Niet opgemerkt, maar inderdaad een goede oplossing.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$tekst = 'CURABITUR RISUS DER - Blandit tempus porttitor.';
echo '<p>' . $tekst . '</p>' . PHP_EOL;
$content = explode(' ', $tekst, 4);
echo '<pre>';
print_r( $content );
echo '</pre>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
if ( $content[$i] == ctype_upper( $content[$i] ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
}
}
echo '<p>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
echo $content[$i] . ' ';
}
echo '</p>';
?>
$tekst = 'CURABITUR RISUS DER - Blandit tempus porttitor.';
echo '<p>' . $tekst . '</p>' . PHP_EOL;
$content = explode(' ', $tekst, 4);
echo '<pre>';
print_r( $content );
echo '</pre>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
if ( $content[$i] == ctype_upper( $content[$i] ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
}
}
echo '<p>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
echo $content[$i] . ' ';
}
echo '</p>';
?>
(ongetest):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$tekst = "'S-HERTOGEN DEN BOSCH - Blandit tempus porttitor.";
if(preg_match('#^(?P<plaats>[A-Z\' -]+) - (?P<tekst>.*)#', $tekst, $aMatches)) {
echo '<span class="first">'.htmlspecialchars($aMatches['plaats']) . '</span>';
echo htmlspecialchars($aMatches['tekst']);
}
else {
echo htmlspecialchars($tekst);
}
?>
$tekst = "'S-HERTOGEN DEN BOSCH - Blandit tempus porttitor.";
if(preg_match('#^(?P<plaats>[A-Z\' -]+) - (?P<tekst>.*)#', $tekst, $aMatches)) {
echo '<span class="first">'.htmlspecialchars($aMatches['plaats']) . '</span>';
echo htmlspecialchars($aMatches['tekst']);
}
else {
echo htmlspecialchars($tekst);
}
?>
Toevoeging op 24/01/2017 17:51:40:
uitleg van de regex:
^ vanaf het begin van de string in $tekst
(?P<xxxxx>) sla het resultaat op in $aMatches['xxxxx']
[A-Z\' -]: een serie karakters om uit te kiezen: hoofdletters A tm Z (A-Z)
: een ', een spatie en een koppel teken
+ : daarvan zoeken we 1 of meer tekens
- : Daarachter moet een spatie, koppelteken spatie komen
(?P<tekst>.*) alle tekens die daarna nog komen opslaan in $aMatches['tekst']
Gewijzigd op 24/01/2017 17:51:57 door Ivo P
https://home.kpn.nl/pagklein/almanak.html
Met dit kan je zo'n beetje alles er uit krijgen :
't GEULLE Almere-Stad 's-Hertogenbosch BLaNDIT tempus porttitor.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
if ( $content[$i] == "'t" || ( strpos( $content[$i] , "s-" ) == TRUE ) || ( strpos( $content[$i] , "-" ) == TRUE ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
} elseif ( $content[$i] == ctype_upper( $content[$i] ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
}
echo '<p>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
echo $content[$i] . ' ';
}
echo '</p>';
}
if ( $content[$i] == "'t" || ( strpos( $content[$i] , "s-" ) == TRUE ) || ( strpos( $content[$i] , "-" ) == TRUE ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
} elseif ( $content[$i] == ctype_upper( $content[$i] ) ) {
$content[$i] = '<span style="color : red;">' . $content[$i] . '</span>';
echo '<p style="color : red;">' . $content[$i] . '</p>';
}
echo '<p>';
for ( $i = 0 ; $i < count( $content ) ; $i++ ) {
echo $content[$i] . ' ';
}
echo '</p>';
}