Hassasiyeti 2 olan bir ondalık için düzenli ifade nedir?
Geçerli örnekler:
123.12
2
56754
92929292929292.12
0.21
3.1
Geçersiz örnekler:
12.1232
2.23332
e666.76
Ondalık nokta isteğe bağlı olabilir ve tam sayılar da dahil edilebilir.
Geçerli regex belirteçleri uygulamaya göre değişir. Genel bir form şöyledir:
[0-9]+(\.[0-9][0-9]?)?
Daha kompakt:
\d+(\.\d{1,2})?
Her ikisinde de ondalık basamaktan önce ve sonra en az bir basamak olduğu varsayılır.
Tüm dizenin bu formda bir sayı olmasını istemek için, ifadeyi aşağıdaki gibi başlangıç ve bitiş etiketlerine sarın (Perl'in formunda):
^\d+(\.\d{1,2})?$
Tek bir nokta (.
) girdisini hariç tutarken, ondalık sayıdan (.12
) önce baş rakamı olmayan sayıları ve sonda nokta (12.
) olan tam sayıları eşleştirmek için aşağıdakileri deneyin:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
İsteğe bağlı hale getirmek için kesirli kısmı ()?
içine sardı. Bunun 12.
gibi formları hariç tuttuğunu unutmayın. Bu daha çok ^\d+\.?\d{0,2}$
gibi olurdu.
Tekrarı durdurmak ve ondalık değerin tam kısmına kısıtlama getirmek için ^\d{1,6}(\.\d{1,2})?$
kullanın.
^[0-9]+(\.[0-9]{1,2})?$
Düzenli ifadeleri anlamak bir yana, okumak bile korkunç olduğundan, işte ayrıntılı eşdeğeri:
^ # 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
Çoğu düzenli ifade uygulamasında (en yaygın olan PCRE dahil) [0-9]
yerine \d
yazabilirsiniz. Ben okunmasının daha kolay olduğunu düşündüğüm için [0-9]
olarak bıraktım.
Ayrıca, kontrol etmek için kullandığım basit Python betiği de burada:
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
e666.76daki
e`yi hesaba katmanız gerekmeyecek mi?
ile
(e|0-9)\d*\d.\d{1,2)