Autor Zpráva
dracekvo
Profil *
Zdravím. Zkouším vytvořit regulérní vyraz, kde může být číslo od 0 desetinných míst nebo až 2 desetinná místa.
Vymyslel jsem toto, ale určitě je to špatně.
^[0-9]?(.\d{1,2})$

Díky, tomuhle moc nerozumím.
Majkl578
Profil
Tečku musíš escapovat, jinak znamená "jakýkoliv znak". Rovněž začátek nedává smysl - číslo by mohlo být maximálně jednociferné.
^\d+(\.\d\d?)$
Joker
Profil
dracekvo:
Tak jednak se tomu říká regulární výraz.

K problému:
- „určitě je to špatně“ není zrovna výstižný popis.
- Pokud před desetinnou tečkou má být víc číslic než jedna, místo otazníku patří hvězdička.
- Tenhle výraz umožňuje jen číslo s jedním nebo dvěma desetinnými místy. Pokud má projít i celé číslo, měla by celá desetinná část být nepovinná, tj. otazník za závorkou.
dracekvo
Profil *
Pravdu díš, na to, že by bylo jednociferné jsem nevzpoměl :)
king26
Profil
/^\d+(\.\d{1,2})?$/

Takto by to mohlo být.


EDIT: trošku pozdě ;)
dracekvo
Profil *
Joker: Já jsem právě myslel, že ten otazník patří k tomu v závorce.
takže tedy by šel tento zápis zapsat i takto? Nejsem si jistý, jestli je povoleno tohle \d{1,2} , tj, jedno nebo dvě čísla

^[0-9]*(\.\d{1,2})?$
Joker
Profil
dracekvo:
Takhle by to šlo, záleží ještě na zadání, jestli na začátku musí být číslo nebo ne, tzn. jestli třeba „.37“ je platná hodnota.
Já z toho otazníku v původním výrazu usoudil, že to má projít. Pokud projít nemá, patří místo hvězdičky +, jako píše king26.
Varianta s hvězdičkou má ještě jednu možnou nepříjemnost, že tím projde i prázdný řetězec.
dracekvo
Profil *
No, nemělo by to být prázdné, a další varianty jsou 0, 0.0 a 0.00
Prázdno před desetinou tečkou bych raději neměl.
takže takto?
^[0-9]+(\.\d{1,2})?$

a pokud bych chtěl aby prošlo i s tečkou, nebo i z čárkou, tak to změním takto?
^[0-9]+((\.|\,)\d{1,2})?$
juriad
Profil
výčet možných znaků: [.,] -- uvnitř není třeba escapovat, svislítko slouží spíše pro spojování větších bloků

\d a [0-9] je identické, raději používej jen jednu varianu; \d je rozšířením oproti BRE, [] funguje vždy a všude
ERE se od BRE dost liší tím, co je nutné escapovat:
"minimálně jeden výskyt": \+ (BRE), + (ERE), stejně je na tom i počet opakování ve fousatých závorkách

podle mě nejlepší všude funkční řešení je:
^[0-9][0-9]*([.,][0-9][0-9]?)?$

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0