[PHP][regex] match eerste 6 tekens van string lukt niet

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik heb al wat tutorialtjes door gelezen en geprobeerd maar die
regular expressions blijven een pain in the ass.

Mijn probleem (wat me op het eerste gezicht niet zo moeilijk leek)

Ik wil de $POST array doorlopen om de juiste variable daar uit te filteren
en vervolgens in een andere array plaatsen om deze weer te gebruiken
voor iets anders.

code:
1
2
3
4
5
6
7
8
9
10
11
12
$classData = $POST;
$editData = array();    
    
reset($classData);

while($array_cell = each($classData)) {
    if(ereg('[txtUser]{1}[a-z,A-Z,0-9]+', $array_cell[key])) {
    $editData[$array_cell[key]] = Global_EscapeStrings($array_cell[value]);
    }
}

$this->_classData = $editData;


Zoals uit mijn gebrekige regex misschien wel te zien is ben ik op zoek naar alle
variable die beginnen met de text "txtUser" wat daarachterstaat doet er niet toe.

Met de bovenstaande code werkt het niet want, ik heb het ook al met preg_match
geprobeerd maar krijg het neit voor elkaar...

[ Voor 0% gewijzigd door Verwijderd op 28-12-2006 23:10 . Reden: typo ]


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Je zou dit ook op kunnen lossen met substr

Systeem | Strava


  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Je gebruikt een regex, terwijl dat in dit geval niet echt nodig lijkt :) . Daarnaast zou preg_match een stuk sneller zijn dan ereg, naar waarschijnlijkheid.

PHP:
1
2
3
4
5
6
7
$collected = array();

foreach($array as $value) {
  if(strstr($value, 'txtUser') !== false) {
    $collected[] = $value;
  }
}


Overigens zou een corect pattern hier ergens op lijken:

code:
1
/textUser.*/


Wat jij nu namelijk doet is zoeken voor iets beginend met één karakter uit de reeks 'txtUser', gevolgd daar één of meer karakters uit de serie 'a-z,A-Z,0-9'. (Waarbij die komma's dus als karakters worden gezien.) ;) .

[ Voor 8% gewijzigd door JHS op 28-12-2006 23:18 ]

DM!


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Of met strpos:
PHP:
1
2
3
if (strpos($array_cell['key'], 'txtUser') === 0)
{
}

maar wellicht is het gewoon handiger om de namen van je form-elementen aan te passen:
HTML:
1
2
<input name="txtUser[foo]">
<input name="txtUser[bar]">

Dan kan je 'foo' en 'bar' terugvinden in $_POST['txtUser'] ;)
JHS schreef op donderdag 28 december 2006 @ 23:17:
Overigens zou een corectpattern hier ergens op lijken:

code:
1
/textUser.*/
correctie:
code:
1
/^txtUser/

;)

[ Voor 26% gewijzigd door crisp op 28-12-2006 23:19 ]

Intentionally left blank


Verwijderd

Topicstarter
Heb ik ook aan gedacht... maar is het niet netter om met regex te doen?

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Driftin: Waarom zou het netter zijn om iets véél langzamers te gebruiken, terwijl dit ook keurig werkt :) ?

edit:
crisp: Scherp :X :P .

[ Voor 18% gewijzigd door JHS op 28-12-2006 23:20 ]

DM!


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Verwijderd schreef op donderdag 28 december 2006 @ 23:18:
[...]


Heb ik ook aan gedacht... maar is het niet netter om met regex te doen?
Je zoekt naar een letterlijk stukje tekst in een string, daar heb je geen pattern-matching voor nodig daar zijn string-functies voor bedoelt :)

Intentionally left blank


Verwijderd

Topicstarter
JHS schreef op donderdag 28 december 2006 @ 23:19:
Driftin: Waarom zou het netter zijn om iets véél langzamers te gebruiken, terwijl dit ook keurig werkt :) ?

edit:
crisp: Scherp :X :P .
Was ik niet van op de hoogte (als ik er bij nadenk wel... maar zit al te lang achter die
f*cking pc om over zoiets na te denken!)

Het werkt zoals vanzelfsprekend wel!

Ik heb nog wel een andere vraag maar die is van latere zorg! Thx voor jullie snelle
(op dit tijdstip) scherpe reactie!

Verwijderd

Het is misschien wel heel netjes om met requliere expressie te werken. Maar reguliere expressies zijn alleen voor onbekende dingen waarvan alleen de structuur bekend is. Zo kun je ook een heel XML-bestand parseren met reguliere expressies, maar met een beetje klieren met strings gaat dat een stuk sneller.
Met preg_match had de goede code overigens dit geweest:
PHP:
1
2
3
4
5
6
7
8
9
10
reset($classData =& $POST); # geen data kweken als 't niet nodig is...
$this->_classData = Array();
$editData =& $this->_classData;

while(is_string($key = key($classData)) || is_numeric($key)) {
    if(preg_match('#^txtUser#', $key)){
         $editData[$key] = Global_EscapeStrings(current($classData));
    }
    next($classData);
}


P.S.: Er zaten een paar grove fouten in je scriptwerk:
$array_cell[key] => $array_cell['key'] :: Je moet gewone strings gebruiken! Ik vraag me af of je de error_reporting wel op E_ALL hebt staan, anders had die je er al lang op gewezen...
$array_cell[value] => $array_cell['value'] :: zelfde verhaal...
Pagina: 1