login  Naam:   Wachtwoord: 
Registreer je!
 Forum

RegExp en procenten

Offline BladiN - 29/09/2004 12:04 (laatste wijziging 29/09/2004 12:05)
Avatar van BladiNGouden medailleGouden medaille

Grafische gevorderde
Ik zit nu op school, en kan zelf niet testen, maar ik ben bezig met een RegExp, en heb al verschillende dingen geprobeerd waaronder dit:

  1. <?
  2. if(!eregi(^[0-9]{1,3}+%$, $blub2)) {
  3. print("fout");
  4. }
  5. ?>


Hij mag dus alleen getallen pakken van weet ik veel hoelang en eventueel een %-teken erachter.
Maar het schijnt niet te werken, wat doe ik fout?

5 antwoorden

Gesponsorde links
Offline Thomas - 29/09/2004 12:56
Avatar van Thomas Moderator ^ het begin van je expressie
[0-9] de karakter klasse waarin 0, 1, 2, ..., 9 zit
{1-3} minimaal 1, maximaal 3 karakters van deze klasse
+ ??? Je gebruikt ofwel +, ofwel {a, b} (met a een minimum en b een maximum), maar niet allebei lijkt me
% Als dit een optioneel karakter is, moet er een ? achter. Ik weet overigens niet of % een speciaal karakter is ?
$ het einde van je expressie

Zijn je procenten hele procenten, zonder decimalen?
Geef eens een paar voorbeelden van geldige invoer? Dat maakt het redeneren over de expressie een stuk eenvoudiger.
Offline BladiN - 29/09/2004 13:32 (laatste wijziging 29/09/2004 13:33)
Avatar van BladiN Gouden medailleGouden medaille

Grafische gevorderde
Ja het moeten hele getallen zijn zonder decimalen, die + moet er toch tussen zodat de % er alleen ACHTER mag staan niet ertussenin? en die % is optioneel, dus een ? erachter.. het enigste probleem is dan nog.. het mag alleen tussen de 1 en 3 tekens zijn als de string daadwerkelijk een % bevat, zit die er niet in mogen dat zoveel getallen zijn als mogelijk

Geldig:
1%
10%
100%
1
10
100
1000
10000

enz..
Offline Thomas - 29/09/2004 13:37 (laatste wijziging 29/09/2004 13:50)
Avatar van Thomas Moderator probeer eens
^[1-9][0-9]{,2}(%|([0-9])*)$

getal begint met een cijfer > 0
daarna maximaal 2 cijfers in 0 t/m 9
daarna of een % of een willekeurig aantal cijfers

Edit:
Dit moet het zijn
"/^[1-9][0-9]{0,2}(%|[0-9]*)$/"

maar keurt ook 600% goed 
Offline BladiN - 29/09/2004 13:50 (laatste wijziging 29/09/2004 13:54)
Avatar van BladiN Gouden medailleGouden medaille

Grafische gevorderde
Zal het proberen zodra ik thuis ben (dus rond 5 uur een keer) alvast bedankt iig

Nja dat keurt hij wel goed dan ja, maar dan kan ik gewoon een if schrijven met als groter dan 100 dat het dan 100 is
Offline BladiN - 29/09/2004 17:13 (laatste wijziging 29/09/2004 18:11)
Avatar van BladiN Gouden medailleGouden medaille

Grafische gevorderde
Nou heb ik gekozen voor preg_match, en wil ik gewoon even stap voor stap testen (want het werkte niet echt)

Ik begin met dit:

if(!preg_match("/^([0-9])$/",$blub2))
{
print('fout');
} else {
print('goed');
}

maar als ik dan 2a zou invoeren dan geeft ie net zo goed 'goed' weer.. waar komt dat door?

[Edit]Oke de regex is me nu gelukt, maar nu het volgende probleem:
if(preg_match("#^(([0-9]{1,3}%?)|[0-9]+)$#",$blub) && !empty($blub) || empty($blub))
{
$this->error = true;
}
is waar ik mee aangeven of iets true is of niet, maar het probleem is natuurlijk dat hij dan de laatste altijd pakt, ik wil dat als er 1 true tussen zit hij deze ook zou printen, en als er dan een foute invoer is dat hij die gewoon niet print. Hoe los ik dit op?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.204s