Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: Gökhan BEKEN - 15 Ocak 2016, 10:49:39

Başlık: AES key Regex
Gönderen: Gökhan BEKEN - 15 Ocak 2016, 10:49:39
Aes anahtarının düzgün girildiğini anlamam için regex ile validation yapmam lazım. Veriler hexadecimal sayıların string olarak yazılmış hali olacak ve virgül ile ayrılmış olacak. Regex ile nasıl ifade edebilirim?
Örnek string:
00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF
Aslında kurallar basit:
1-string içinde virgül, 0-9 arası ve A-F arasından başka bir karakter bulunmamalı.
2-virgüller iki karakterde bir gelmeli.
3-Toplam 47 karakter olmalı, az veya fazla olmamalı.
Başlık: Ynt: AES key Regex
Gönderen: Burak B - 15 Ocak 2016, 10:50:52
Yanlış girilse ne oluyor ki ? :)

https://regex101.com/ <- Burayı bir dene
Başlık: Ynt: AES key Regex
Gönderen: Gökhan BEKEN - 15 Ocak 2016, 10:57:24
Bir zararı yok gibi, gelen veriyi bu anahtara göre canlı olarak açıyorum, kullanıcı doğru girmemişse(doğru girdiğini sanıyorsa), hata almadığı için hatasının farkına varmıyor.
Veri sayısını ve virgül sayısını saydırarak bir kontrol yaptım ama virgül'ün yeri felan da gerekiyor. Tek tek yapacağıma regex ile tek seferde yapayım dedim.
Başlık: Ynt: AES key Regex
Gönderen: JKramer - 15 Ocak 2016, 11:04:37
([0-9A-F]{2},){15}[0-9A-F]{2}
Başlık: Ynt: AES key Regex
Gönderen: Gökhan BEKEN - 15 Ocak 2016, 11:24:38
Alıntı yapılan: JKramer - 15 Ocak 2016, 11:04:37
([0-9A-F]{2},){15}[0-9A-F]{2}
Teşekkürler hocam ama eksik var sanırım
function ValidateAesKey(key) {

if (/([0-9A-F]{2},){15}[0-9A-F]{2}/.test(key))
{
alert("HATA: AES key doğrulanmadı");
return (0)
}
alert("AES doğrulandı");
return (1);
}
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF"); //doğrulanmadı
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE"); //doğrulandı
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,6asRaaaaaaC");  //doğrulanmadı
Başlık: Ynt: AES key Regex
Gönderen: JKramer - 15 Ocak 2016, 11:33:41
Ben Code::Blocks içindeki Regular Expressions testbed plugini ile yapmıştım, şimdi de http://regexr.com/ (http://regexr.com/) adresinden kontrol ettim doğru görünüyor.

Verdiğiniz bilgiye göre {15} kısmını {16} yaparsanız olacak gibi ama nedeni konusunda bir fikrim yok.
Başlık: Ynt: AES key Regex
Gönderen: Gökhan BEKEN - 18 Ocak 2016, 18:00:47
16 yaptığımda hepsini doğruluyor :)

Neyse regex'e hala alışamadığımdan eski usül yaptım.

<script type="text/javascript" language="JavaScript">
function ValidateAesKey(key) {
if(47!=key.length){
alert("Eksik veya fazla veri girdiniz.");
return 1;
}
var index=0;
for (index = 0; index < key.length; index  ) {
var karakter = key.charAt(index);
var char_say=0;
char_say = karakter.charCodeAt();

if( ((index 1)%3) ==0){ //virgül olmaması gereken yer
if ( char_say != 44 ){ //virgül koymayı unutmuş mu
alert("virgül hatası");
return(1);
}
}
else{
if (  (97 <= char_say) && (char_say <= 102) ){ // a-f
}
else if (  (65 <= char_say) && (char_say <= 70) ){ // A-F
}
else if (  ((0 48) <= char_say) && (char_say <= (9 48)) ){ //0-9
}
else {
if ( char_say == 44 ){//virgül olmaması gereken yerlerde virgül var mı?
alert("virgül hatası 2");
return(1);
}
else{
alert("[A-Z] [a-z] [0-9] [,] işaretleri dışında karakter kullanmayınız!");
}
return(1);
}
}
}
return 0;
}

ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,6D,71,3C");
ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,6D,713,C");
ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,%asRaaaa");
</script>




Bu arada bir şey farkettim @gevv hocam ,   işaretleri code tagına alınınca çıkmıyor sanırım.