Door
Hans Vereyken
op 05-06-2010 16:47
gewijzigd op 05-06-2010 16:49
6.313 views
Beste,
Ik probeer een regular expressions te vinden die volgende strings matched:
Amé rosé
Grünwalder
Wakamé
Dit is wat ik heb tot hiertoe:
^[a-zA-Z0-9.,()\/\-*+ ]{0,50}$
De string moet bestaan uit 0-50 tekens (letters en of cijfers, .,()/-*+ en spatie). Werkt perfect tot er dus sprake is van een é, è, ê, ü, enz. Na wat opzoekingen vond ik een mogelijke oplossing: [[=e=]], maar om één of andere reden wil het niet, ik denk dat ik het verkeerd gebruik, maar hoe moet het dan wel? ik geraak er niet uit.
Dit heb ik geprbeerd voor é, è en ê:
^[a-zA-Z0-9.,()\/\-*+[=e=] ]{0,50}$
^[a-zA-Z0-9.,()\/\-*+[[=e=]] ]{0,50}$
^[a-zA-Z0-9.,()\/\-*+([=e=]) ]{0,50}$
Geen werkte.
Als ik dan enkel
[[=e=]] doe en probeer het te matchen met string 'é', werkt het ook niet... wat doe ik verkeerd?
@Piet Verhagen:
Als ik iets nieuws probeer zet ik het altijd eerst in een klein scriptje, zoals het daar staat was het bestand volledig.
Als ik dat stukje dan kopieer in het script waar het moet dienen ging het fout. Dit is het script (zitten nog veel fouten in, ik weet het, is niet af), ik heb de code er even terug tussen geplakt:
<?php
include ('functies.php');
$admin = true;
include ('beveiliging.php');
//Functie voor het checken van grote csv toestanden, regex voorzien per veld, in juiste volgorde en aantal
function validCsv ($csv, $regexps) {
$data = nl2br ($csv); //nl2br
$numberOfLines = substr_count($data, "<br />"); //Count occurances of <br />
$result[0] = true;
$result[1] = $numberOfLines;
$result[2] = "";
$lineNumber = 0;
while ($lineNumber < $numberOfLines) {
$lineNumber++;
list ($lineString, $data) = explode ("<br />", $data, 2); //First line in $lineString, rest in $data
$lineArray = str_getcsv ($lineString, ","); // split values of $lineString in array in $lineArray
if (!$lineArray) {
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: can not split the string (".$lineString.") (".$lineString.")<br />";
}
$offset = 0;
while (isset ($regexps[$offset])) { // as long as there are regular expressions set hold them against the next field, if field count doesn't match --> false
$field = preg_match ($regexps[$offset], $lineArray[$offset]);
$offset++;
if (!$field | $field == "0") { //if regular expression didn't match or preg_match fails/dies
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber.", field ".$offset."</strong>: no match with regular expression (".$lineArray[$offset-1].") (".$lineString.")<br />";
}
}
if (isset ($lineArray[$offset])) { //If there are more line's than regular expressions
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: to many fields (".$lineString.")<br />";
}
}
return $result;
}
$importeren = "";
if (isset ($_POST['import'])) {
$lijnen = substr_count(nl2br ($_POST['hoofdgroepen']), "<br />");
if ($lijnen == "0" | $_POST['hoofdgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (hoofdgroepen): incompatibele data (Foutcode i1)<br />";
}
$lijnen = substr_count(nl2br ($_POST['subgroepen']), "<br />");
if ($lijnen == "0" | $_POST['subgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (subgroepen): incompatibele data (Foutcode i2)<br />";
}
$lijnen = substr_count(nl2br ($_POST['producten']), "<br />");
if ($lijnen == "0" | $_POST['producten'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (producten): incompatibele data (Foutcode i3)<br />";
}
$getal = "/^[1-9]{1}[0-9]{0,3}$/";
$tekst = "/^[\w\.,:!'()\/\-\+\*%&\x{00B0} ]{0,50}$/u";
$csv = true;
$hoofdgroepen = $_POST['hoofdgroepen'];
$regexps = array ($getal, $tekst, $getal);
$result = validCsv ($hoofdgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (hoofdgroepen) (Foutcode i4), validCsv:<br> ".$result[2]."<br>";
}
$subgroepen = $_POST['subgroepen'];
$regexps = array ($getal, $tekst, $getal, $getal);
$result = validCsv ($subgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (subgroepen) (Foutcode i5), validCsv:<br> ".$result[2]."<br>";
}
$producten = $_POST['producten'];
$regexps = array ($getal, $tekst, $tekst, $tekst, "/^[1-5]{1}$/", "/^[0-9\-]{1,4}[.]{1}[0-9]{2}/", $getal);
$result = validCsv ($producten, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (producten) (Foutcode i6), validCsv:<br> ".$result[2]."<br>";
}
if ($csv) {
$search = "'";
$replace = "\'";
$hoofdgroepen = str_replace ($search, $replace, $hoofdgroepen);
$subgroepen = str_replace ($search, $replace, $subgroepen);
$producten = str_replace ($search, $replace, $producten);
//Data als 3 lange teksten in de database gooien
$query = "INSERT INTO import VALUES ('$hoofdgroepen','$subgroepen','$producten')";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het toevoegen van de csv in import (Foutcode i7)<br>";
}
//Gegevens uit de database dumpen in drie bestanden waar mysql aan kan
$query = "SELECT hoofdgroepen INTO DUMPFILE 'hoofdgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (hoofdgroepen) (Foutcode i8)<br>";
}
$query = "SELECT subgroepen INTO DUMPFILE 'subgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (subgroepen) (Foutcode i9)<br>";
}
$query = "SELECT producten INTO DUMPFILE 'producten.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (producten) (Foutcode i10)<br>";
}
//Veelheid aan gegevens verwijderen uit database import
$query = "DELETE FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het verwijderen van de csv uit import (Foutcode i11)<br>";
}
if ($csv) {
//Leegmaken van de tabellen
$query = "DELETE FROM hoofdgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van hoofdgroepen (Foutcode i12)<br>";
}
$query = "DELETE FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van subgroepen (Foutcode i13)<br>";
}
$query = "DELETE FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van producten (Foutcode i14)<br>";
}
//importeren van de csv bestanden
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv'
INTO TABLE hoofdgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (hoofdgroepen) (Foutcode i15)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv'
INTO TABLE subgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (subgroepen) (Foutcode i16)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv'
INTO TABLE producten
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (producten) (Foutcode i17)<br>";
}
if ($csv && $error == "" && $dberror == ""){
$importeren = "<h2>Geslaagd</h2>";
$importeren .= "<p>Het importeren is geslaagd!</p>";
//controleren op valse verwijzingen
$query = "SELECT id,naam,id_hoofdgroep FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de subgroepen (Foutcode i18)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$hoofdgroep = mysql_result ($result, $i, 'id_hoofdgroep');
$query2 = "SELECT id FROM hoofdgroepen WHERE id = '$hoofdgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende hoofdgroep (Foutcode i19)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM subgroepen WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte subgroep (Foutcode i20)<br>";
} else {
$importeren .= "Subgroep ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande hoofdgroep (".$hoofdgroep.")<br>";
}
}
$i++;
}
$query = "SELECT id,naam,id_subgroep FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de producten (Foutcode i21)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$subgroep = mysql_result ($result, $i, 'id_subgroep');
$query2 = "SELECT id FROM subgroepen WHERE id = '$subgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende subgroep (Foutcode i22)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM producten WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte product (Foutcode i23)<br>";
} else {
$importeren .= "Product ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande subgroep (".$subgroep.")<br>";
}
}
$i++;
}
}
}
//verwijderen csv bestanden van server
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (hoofdgroepen) (Foutcode i24)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (hoofdgroepen) (Foutcode i25)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (subgroepen) (Foutcode i26)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (subgroepen) (Foutcode i27)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (producten) (Foutcode i28)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (producten) (Foutcode i29)<br />";
}
}
}
//html
include ('start.php');
//HIER HEB IK LETTERLIJK GEPLAKT OM TE TESTEN
$subject = "dit is één test met ä en ê en á âäáàêëé è ï î íìö ô óò üû úù";
$search = "âäáàêëéèïîíìöôóòüûúù";
$replace = "aaaaeeeeiiiioooouuuu";
$result = strtr ($subject, $search, $replace);
echo $subject."<br />".$result."<br />".$search."<br />".$replace;
echo $importeren;
?>
<h2>Importeren (CSV)</h2>
<form action = "<?php echo $_SERVER['PHP_SELF']."?lang=nl".addSessieUrl ($cookie, $sessie); ?>" method = "post">
<h3>Hoofdgroepen</h3>
<textarea name = "hoofdgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['hoofdgroepen']; } ?></textarea>
<h3>Subgroepen</h3>
<textarea name = "subgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['subgroepen']; } ?></textarea>
<h3>Producten</h3>
<textarea name = "producten" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['producten']; } ?></textarea>
<br><br>
<input type = "submit" name = "import" value = "Importeren">
<input type = "reset" value = "Opnieuw beginnen">
</form>
<?php
include ('stop.php');
?>