Ik heb onderstaande code, maar ik wil de volgende tekens nog toevoegen aan "preg_match": /-?:().,'+
Zodra ik dit binnen de aanhalingstekens zet dan werkt het niet meer, ik heb al verschillende mogelijkheden geprobeerd maar krijg het niet voor elkaar.

<?php

$name = "blëa?blaZZ/-?:().,'+";

$arr1 = str_split($name);
//print_r($arr1);

echo "<br>";
foreach($arr1 as $value) {
if (!preg_match("/^[0-9a-zA-Z ]*$/",$value)) {
echo "fout " . $value . "<br>";
} else {
echo "goed " . $value . "<br>";
}
}

?>

Ik wil namelijk door een stuk tekst heen lopen en alle tekens die niet geldig zijn vervangen door een algemeen teken wat wel geldig is.

Alvast bedankt voor een reactie.

Groeten Ronald
Dit werkt bij mij :

<?php
$name = "blëa?blaZ Z/-?:().,'+";
$arr1 = str_split($name);

echo '<pre>';
print_r($arr1);
echo '</pre>';

$teller = 0;

foreach($arr1 as $value) {
	if (!preg_match("/^[0-9a-zA-Z ]*$/",$value)) {
		echo "fout " . $value . "<br>";
		$arr1[$teller] = 'nieuwe waarde';
	} else {
		echo "goed " . $value . "<br>";
	}
	$teller++;
}

echo '<pre>';
print_r($arr1);
echo '</pre>';
?>

Hallo Adoptive Solution,

Ik wil juist nog wat tekens toevoegen aan preg_match, maar dan werkt het niet meer.

<?php

//Dit heb ik en dat werkt
if (!preg_match("/^[0-9a-zA-Z ]*$/",$value))

//Maar als ik deze tekens toevoeg /-?:().,'+ dan werkt het niet meer
if (!preg_match("/^[0-9a-zA-Z /-?:().,'+]*$/",$value))

?>
Als ik de uitbreiding toepas krijgt alles de 'nieuwe waarde', dus fout.

Als ik dit gebruik :

(!preg_match("/^[0-9a-zA-Z \/-?:().,'+]*$/",$value))


dan worden alleen de tekens ë en - vervangen.

Als ik dit gebruik :

(!preg_match("/^[0-9a-zA-Z \/\-?:().,'+]*$/",$value))


dan wordt alleen teken ë vervangen.

Merk op dat teken ë in de array op plek 2 en 3 komt. Komt waar schijnlijk omdat nergens de tekenset wordt gedefinieerd.

Hallo Adoptive Solution,

Bedankt voor de oplossing, het werkt nu.

Ik zie inderdaad dat het teken ë nu op plek 2 en 3 komt, hoe kan ik dan een tekenset definiëren?
De vraag die zou komen.

Effe gezocht :

<?php
// zie https://stackoverflow.com/questions/9438158/split-utf8-string-into-array-of-chars

function utf8Split($str, $len = 1) {
  $arr = array();
  $strLen = mb_strlen($str, 'UTF-8');
  for ($i = 0; $i < $strLen; $i++)
  {
    $arr[] = mb_substr($str, $i, $len, 'UTF-8');
  }
  return $arr;
}

$name = "blëa?blaZ Z/-?:().,'+";

$arr1 = utf8Split( $name, 1 );

echo '<pre>';
print_r($arr1);
echo '</pre>';

$teller = 0;

foreach($arr1 as $value) {
	if (!preg_match("/^[0-9a-zA-Z \/\-?:().,'+]*$/",$value)) {
		echo "fout " . $value . "<br>";
		$arr1[$teller] = 'nieuwe waarde';
	} else {
		echo "goed " . $value . "<br>";
	}
	$teller++;
}

echo '<pre>';
print_r($arr1);
echo '</pre>';
?>
Top, hartstikke bedankt.

Ik had deze nog gevonden:
<?php
$arr1 = preg_split('//u', $name, null, PREG_SPLIT_NO_EMPTY);
?>

in plaats van:
<?php
$arr1 = str_split($name);
?>
De reden dat dit niet werkt is omdat die karakters een speciale betekenis hebben binnen reguliere expressies, ze worden gebruikt voor de matching zelf.

Om deze karakters te ontdoen van deze speciale betekenis zodat je die exacte karakters kunt matchen zul je deze moeten escapen. Dit doe je door een backslash (\) te plaatsen voor zo'n karakter.

Reageren