Kakšen je regularni izraz za decimalno število z natančnostjo 2?
veljavni primeri:
123.12
2
56754
92929292929292.12
0.21
3.1
Neveljavni primeri:
12.1232
2.23332
e666.76
Decimalna vejica je lahko neobvezna, vključena pa so lahko tudi cela števila.
Veljavni žetoni regex se razlikujejo glede na implementacijo. Splošna oblika je:
[0-9]+(\.[0-9][0-9]?)?
Bolj kompaktno:
\d+(\.\d{1,2})?
Pri obeh se predpostavlja, da imata obe števili vsaj eno številko pred in eno za decimalnim mestom.
Če želite zahtevati, da je celoten niz število te oblike, izraz ovijte z začetno in končno oznako, kot na primer (v Perlovi obliki):
^\d+(\.\d{1,2})?$
Če želite ujemati števila brez začetne številke pred decimalko (.12
) in cela števila z zaključno piko (12.
), hkrati pa izključiti vnos ene same pike (.
), poskusite z naslednjim:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Delni del je zavit v ()?
, da je neobvezen. Zavedajte se, da to izključuje oblike, kot je 12.
Vključno z `^\d+\..?\d{0,2}$``.
Uporabite ^\d{1,6}(\.\d{1,2})?$
za prekinitev ponavljanja in omejitev na celoten del decimalne vrednosti.
^[0-9]+(\.[0-9]{1,2})?$
Ker je regularne izraze grozno brati, še manj pa razumeti, je tu še besedni ekvivalent:
^ # Start of string
[0-9]+ # Require one or more numbers
( # Begin optional group
\. # Point must be escaped or it is treated as "any character"
[0-9]{1,2} # One or two numbers
)? # End group--signify that it's optional with "?"
$ # End of string
V večini implementacij regularnih izrazov (vključno z najpogostejšo PCRE) lahko [0-9]
nadomestite z \d
. Sam sem pustil [0-9]
, saj menim, da je tako lažje berljivo.
Tukaj je tudi preprosta skripta Python, ki sem jo uporabil za preverjanje:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]
assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0