Autor | Zpráva | ||
---|---|---|---|
dracekvo Profil * |
#1 · Zasláno: 30. 9. 2011, 09:18:50
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 |
#2 · Zasláno: 30. 9. 2011, 09:46:28
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 |
#3 · Zasláno: 30. 9. 2011, 09:50:47
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 * |
#4 · Zasláno: 30. 9. 2011, 09:51:06
Pravdu díš, na to, že by bylo jednociferné jsem nevzpoměl :)
|
||
king26 Profil |
#5 · Zasláno: 30. 9. 2011, 09:52:20 · Upravil/a: king26
/^\d+(\.\d{1,2})?$/ Takto by to mohlo být. EDIT: trošku pozdě ;) |
||
dracekvo Profil * |
#6 · Zasláno: 30. 9. 2011, 09:53:45
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 |
#7 · Zasláno: 30. 9. 2011, 10:05:17
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 * |
#8 · Zasláno: 30. 9. 2011, 10:13:41
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 |
#9 · Zasláno: 30. 9. 2011, 19:23:20
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]?)?$ |
||
Časová prodleva: 13 let
|
0