[PHP/JavaScript] Reguliere Expressies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Met behulp van JavaScript en reguliere expressies moet ik de invoer van velden controleren, velden die reeds in de database staan moet ik retrospectief met PHP en reguliere expressies controleren.

Nu krijg ik het PHP gedeelte van dit probleem niet synchroon met het JavaScript gedeelte.
Of ik nu preg_match of ereg gebruik alle 'functies' van reguliere expressies zoals \d of \D werken niet. Standaard escapes zoals \\ en \. werken wel.

Hebben jullie dit probleem als eens eerder meegemaakt en hoe hebben jullie dit opgelost?

Hieronder heb ik mijn testcode geplaatst voor het testen van reguliere expressies in JavaScript en PHP

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
30
31
32
33
34
35
36
37
38
<script>
    function checkRegExp()
    {
        re = new RegExp(document.forms[0].regexp.value);
        alert(re.test(document.forms[0].waarde.value));
    }
</script>

<form method='POST'>
    <table>
        <tr>
            <td>
                Waarde:
            </td>
            <td>
                <input type='text' name='waarde'>
            </td>
        <tr>
            <td>
                Regexp
            </td>
            <td>
                <input type='text' name='regexp'>
        </tr>
        <tr>
            <td>
                <input type='submit' onClick='checkRegExp()'>
            </td>
        </tr>
    </table>
</form>

<?php
    if(array_key_exists('waarde',$_POST) && $_POST['regexp'] != '')
    {
        var_dump(ereg(stripslashes($_POST['regexp']), stripslashes($_POST['waarde'])));
    }
?>

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 08:06

crisp

Devver

Pixelated

In javascript:
JavaScript:
1
2
var re = new RegExp('^\d+$');
if (re.test(value)) alert('true');

in php (PCRE, geen POSIX):
PHP:
1
2
$re = '/^\d+$/';
if (preg_match($re, $value)) echo 'true';


Je ziet dus al het verschil: de RegExp constructor in JS behoeft geen delimiters te hebben, maar in PHP moet die delimiter wel opgenomen zijn in de string-parameter voor preg_match.
Ereg is POSIX-based en wijkt teveel af van de PCRE-based regular expression implementatie van JS, dus die zou ik niet gebruiken. Verder zijn er ook nog wel wat verschillen mbt modifiers.

Stripslashes is in PHP alleen noodzakelijk als je gpc_magic_quotes aan hebt staan.

[ Voor 8% gewijzigd door crisp op 13-12-2004 14:30 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

RegEx implementaties zijn verschillend. Daar ligt aan. Lees eens wat op http://www.regular-expressions.info

/spuit 11 :(

[ Voor 16% gewijzigd door Verwijderd op 13-12-2004 14:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het lag inderdaad aan die /^...$/, als je ergens lang naar kijkt dan denk je dat je dat al geprobeert hebt, wat ik ook dacht.

Dankjewel voor jullie hulp en informatie.