Regular expression voor controle nummers

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Nu online
Met de overgang naar Exchange2007 gaan we de mailboxen van medewerkers in 14 mailbox-stores. Afhankelijk van het P-nummer wordt een bepaalde store gekozen.

Ik wil dit oplossen met een regular expression, maar kom er niet goed uit. Ik kan volgens mij het volgende doen:

"*.01|*.02|*.03|*.04|*.05|*.06|*.07" voor mailbox1
"*.08|*.09|*.10|*.11|*.12|*.13|*.14" voor mailbox2
enz.

Mijn gevoel zegt dat er een mooiere oplossing moet zijn, maar deze kom ik niet tegen via google en andere websites. Iemand een beter idee/oplossing?

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 18-09 16:32
Wat is de layout van "Het P nummer"? Is dat puur en alleen een nummer, een random iets, of ...?

Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Nu online
Het P-nummer is altijd numeriek en 8 cijfers lang. Ik wil puur op de laatste twee cijfers gaan matchen.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TweakersOnly schreef op donderdag 23 april 2009 @ 10:18:
Het P-nummer is altijd numeriek en 8 cijfers lang. Ik wil puur op de laatste twee cijfers gaan matchen.
Hoezo wil je dat dan met een regular expression doen?
Dat is toch met een simpele string ( of numerieke ) compare te doen?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Nu online
Ik zit vast aan Novell IDM software die de interface regelt tussen bron- en afnemende systemen. Ik kan niet zomaar een switch-statement oid gebruiken. Een regex is enige mogelijkheid om de controle per mailboxstore in één regel af te vangen :)

Acties:
  • 0 Henk 'm!

  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-09 12:47

dotcode

///\00/\\

(pnummer mod 14 ) + 1 heb je heb mailbox id waar je hem in kwijt moet.

Acties:
  • 0 Henk 'm!

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 25-07 07:34

wizzkizz

smile...tomorrow will be worse

TweakersOnly schreef op donderdag 23 april 2009 @ 10:14:
Ik wil dit oplossen met een regular expression, maar kom er niet goed uit. Ik kan volgens mij het volgende doen:

"*.01|*.02|*.03|*.04|*.05|*.06|*.07" voor mailbox1
"*.08|*.09|*.10|*.11|*.12|*.13|*.14" voor mailbox2
enz.

Mijn gevoel zegt dat er een mooiere oplossing moet zijn, maar deze kom ik niet tegen via google en andere websites. Iemand een beter idee/oplossing?
Bijv:
"(0[1-7])$" voor mailbox 1
"(0[89]|1[0-4])$" voor mailbox 2

Eventueel uit te breiden met een controle op puur numerieke P-nummer:
"^[0-9]{6}" ervoor plaatsen bijvoorbeeld, of "^\d{6}"

[ Voor 0% gewijzigd door wizzkizz op 23-04-2009 15:37 . Reden: overbodige [ en ] weggehaald uit regexp voor mailbox 2 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
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
<?php

$list = array(
    '1' => 'mailbox1',
    '2' => 'mailbox2',
    '3' => 'mailbox1',
    '4' => 'mailbox2',
);

// weet niet wat de input is, dus neem dit als voorbeeld.
$input = "XXXXXX02";

$needle = intval( substr($input, 6, 2) );
$destination = null;

foreach ($list as $id => $mailboxinfo)
{
    if ( $needle == $id )
    {
        $destination = $mailboxinfo;
        
        // mail box gevonden geen nut om verder te gaan
        break;
    }
}

if ( is_null($destination) === true )
{
    throw new Exception("Geen mailbox bij needle gevonden");
}

echo "Shit versturen naar mailbox nummer #" . $destination;

?>

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
4Real schreef op vrijdag 24 april 2009 @ 00:52:
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
<?php

$list = array(
    '1' => 'mailbox1',
    '2' => 'mailbox2',
    '3' => 'mailbox1',
    '4' => 'mailbox2',
);

// weet niet wat de input is, dus neem dit als voorbeeld.
$input = "XXXXXX02";

$needle = intval( substr($input, 6, 2) );
$destination = null;

foreach ($list as $id => $mailboxinfo)
{
    if ( $needle == $id )
    {
        $destination = $mailboxinfo;
        
        // mail box gevonden geen nut om verder te gaan
        break;
    }
}

if ( is_null($destination) === true )
{
    throw new Exception("Geen mailbox bij needle gevonden");
}

echo "Shit versturen naar mailbox nummer #" . $destination;

?>
TweakersOnly schreef op donderdag 23 april 2009 @ 10:24:
Ik zit vast aan Novell IDM software die de interface regelt tussen bron- en afnemende systemen. Ik kan niet zomaar een switch-statement oid gebruiken. Een regex is enige mogelijkheid om de controle per mailboxstore in één regel af te vangen :)
|:(

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Als je de enters weg haalt dan staat alles op 1 regel en dan moet het wel werken :P

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

En dan nog is het geen mooie code. Kijk naar wat Dotcode zei

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
"Regex" komt van regular expression, en dat verwijst weer naar regular languages. Dat betekent dat dit parsing technologie is, geen generieke programmeertaal. Zaken als modulo zitten niet echt in regex'en. Ja, je kunt checken of een string een lengte L modulo N heeft: ^(a{N})*a{L}$ maar dat was absoluut niet wat er hier nodig is.

Dus wizzkizz's oplossing is waarschijnlijk de meest simpele. Ik zou alleen geen tijd spenderen aan het 14 keer checken of "P-nummers" echt met 6 cijfers beginnen. ^.{6} is goed genoeg. Het idee is dat de regex matcher dan direct het 7e en 8e karakter kan testen

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1