Autor Zpráva
miloskroulik
Profil *
Snažím se vytvořit regulární výraz, pomocí něhož by bylo možno testovat správnost formátu vloženého čísla zákona. Zatím jsem se dopracoval k této verzi:

[0-9]*/[0-9]{4}[[:blank:]]{0,1}Sb.

jemuž odpovídá např. následující číslo:

455/1991 Sb.

Rád bych se zeptal, zda nemám ve výrazu nějaké zásadní chyby, či opomenutí. Předem děkuji.
peta
Profil
http://www.volny.cz/peter.mlich/www.htm#main7

([1-9]|[1-9][0-9]*)/[1-9][0-9]{3} ...
* nulu na zacatku muzes nechat, ale takovy pripad by snad nemel nastav
* lomitko nevim, jestli by se nemelo zalomitkovat, protoze...
/reg/g
///g -> // + /g
* mam pocit, ze . znamena 1 znak, * 0 a vice znaku
* Ss bych kontroloval
* a ze tecka na konci muze a nemusi byt
* sb. cele bych to nevidel jako nutnou podminku, muzes doplnit scriptem ty
miloskroulik
Profil *
Děkuji za odpověď. Podle http://php.vrana.cz/escapovani-v-regularnich-vyrazech.php by nemělo být nutné lomítko escapovat (i když na stránce http://www.regexp.cz/ ho v ukázkách escapují, tak nevím). S vynecháním Sb. lze souhlasit (stejně jako s nepovinností tečky), zahrnul jsem ho z důvodu snadnosti okopírování čísla z existujících materiálů (práce by snad neměla vyžadovat tolik přemýšlení).

Potřeboval bych však upřesnit:

- Co myslíte větou "Ss bych zkontroloval"?
- Nerozumím příliš první části: [1-9]|[1-9][0-9]* Nestačilo by uvést [1-9][0-9]*?

Děkuji.
peta
Profil
miloskroulik
[1-9]|[1-9][0-9]
a|b
a = 1-9
b = 1xxx - 9xxx
vylucuje moznost c
c = 0-9, 00xx-99xxx

Ss - kolik S je ve tvem vyrazu? :) chtel jsem tim rici, ze nekdo muze dat male i velke s

jeste bych to mozna udelal jinak, kdyz sb neni podstatne.
455/1991 Sb.
[^0-9/] nahrad '' (to odstrani sb i tecku, mezery pred, mezery za a nesmysly)
test ([1-9]|[1-9][0-9]*)/[1-9][0-9]{3}
pokud je to v JS
'\' , "\/"
a pokud se to musi lomitkovat
'\/' , "\\\/"
(lomitko zalomitkujes, uvozovku zalomitkujes, mno hruza prace s tim je :) )
miloskroulik
Profil *
Děkuji. Teď už je mi to jasnější.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0