Düzenli İfadelerle Bölünebilme Kuralları

TC kimlik numaraları için bir düzenli ifade yazmaktan çok uzağım ama daha temel şeylerin nasıl yapılabileceğini öğrenmeye devam ediyorum. Daha önce düzenli ifadelerle sayıların üçe bölünüp bölünemediğine bakmıştık. Şimdi birkaç bölünebilme kuralını daha inceleyelim.

1 ile Bölünebilme

Her sayı 1 ile tam bölünmektedir.
\d+

2 ile Bölünebilme

Çift olan her sayı 2 ile tam bölünür. Bir sayının 2 ile bölümünden kalan 0 ya da 1'dir.
\d*[02468]

3 ile Bölünebilme

Verilen sayının rakamlarının sayı değerleri toplamı 3 veya 3'ün katıysa bu sayı 3 ile tam bölünebilmektedir.
([0369]|[258][0369]*[147]|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*
Bu düzenli ifadenin nasıl bulunduğunu merak ediyorsanız lütfen kaynaklardaki ilgili yazıya bakınız.

4 ile Bölünebilme

Bir sayının son 2 basamağı 00 ya da 4'ün katıysa o sayı 4 ile tam bölünür. Yani herhangi bir sayının son hanesi veya son haneleri aşağıdaki gibiyse sayı 4'e tam bölünür:

0
4
8

12
16
20
24
28
32
36
40
44
48
52
56
60
64
68
72
76
80
84
88
92
96

Bunlardan ilk olarak aşağıdaki bir düzenli ifade yazabiliriz:
\d*([048]|1[26]|2[048]|3[26]|4[048]|5[26]|6[048]|7[26]|8[048]|9[26])
Biraz daha sadeleştirme yaparsak şu düzenli ifadeye ulaşırız:
\d*([048]|[13579][26]|[2468][048])
Sadeleştirme için [26] ve [048] parantezlerine alma işlemi yaptığımızı düşünebilirsiniz. Büyük ihtimalle baştaki [048] için de yapılabilecek bir şey vardır ama ben de düzenli ifadeleri henüz öğrenme aşamasında olduğum için bu şekilde dışarıda bıraktım şimdilik.

Biraz daha dikkatli bakınca yukarıda bir hata yaptığımızı fark edebiliriz. Sayının sonunu "00", "04" ve "08" için kontrol ettiğimizi düşünürken aslında "0", "4" ve "8" için kontrol ediyoruz ve bu hata aslında 4 ile bölünemeyen pek çok sayıyı bölünüyormuş gibi gösteriyor. Düzeltmek için yukarıdaki ifadeyi şu şekilde değiştirebiliriz:
[048]|\d*([13579][26]|[02468][048])
Bu sefer hata yok gibi görünüyor :)

5 ile Bölünebilme

Son rakamı 0 veya 5 olan sayıların hepsi 5 ile tam bölünmektedir.
\d*[05]

8 ile Bölünebilme

Bir sayının son üç rakamı 000 ya da 8'in katı ise bu sayı 8 ile tam bölünür. Bir haneli, iki haneli ve üç ve daha çok haneli sayıları düşünürsek aşağıdaki sayılar 8'e tam bölünür:

0
8

00
08
16
24
32
40
48
56
64
72
80
88
96

000
008
016
024
032
040
048
056
064
072
080
088
096
104
112
120
128
136
144
152
160
168
176
184
192
200
208
216
224
232
240
248
256
264
272
280
288
296
304
312
320
328
336
344
352
360
368
376
384
392
400
408
416
424
432
440
448
456
464
472
480
488
496
504
512
520
528
536
544
552
560
568
576
584
592
600
608
616
624
632
640
648
656
664
672
680
688
696
704
712
720
728
736
744
752
760
768
776
784
792
800
808
816
824
832
840
848
856
864
872
880
888
896
904
912
920
928
936
944
952
960
968
976
984
992

Bu sayıları ve bu sayılarla biten diğer sayıları tespit etmek için de aşağıdaki düzenli ifade yazılabilir:
[08]|(0[08]|16|24|32|4[08]|56|64|72|8[08]|96)|\d*[02468](0[08]|16|24|32|4[08]|56|64|72|8[08]|96)|\d*[13579](04|12|2[08]|36|44|52|6[08]|76|84|92)
Burada küçük bir sadeleştirme yapabiliriz:
[08]|([048][08]|16|24|32|56|64|72|96)|\d*[02468]([048][08]|16|24|32|56|64|72|96)|\d*[13579](04|12|[26][08]|36|44|52|76|84|92)

10 ile Bölünebilme

Son rakamı 0 olan tüm sayılar 10 ile tam bölünür. Bir sayının 10 ile bölümünden kalan ise birler basamağındaki rakamdır.
\d*0

Notlar

  • 6, 7, 9 ve 11 için bölünebilme kurallarını gerçeklemeyi sonraya bıraktım. Yapabilirsem zorluklarına göre ayrı ayrı yazılarda veya toplu tek bir yazıda nasıl yapıldığını anlatırım.
  • Düzenli ifadelerin başında ^ ve sonunda $ varmış gibi kabul edin, RegExr üzerinde birden çok değeri test ederken kolaylık olması için bu şekilde yazdım.
  • Eksik bölünebilme kurallarını tamamlayabilir, düzenli ifadelerde eksiklik, fazlalık veya hata görürseniz bildirebilirsiniz.

Kaynaklar

Yorumlar

Bu blogdaki popüler yayınlar

Diğer Dillerde Hoşçakal

Mızıka Tabları Nasıl Okunur

conio.h