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ı.
Yanlış girilse ne oluyor ki ? :)
https://regex101.com/ <- Burayı bir dene
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.
([0-9A-F]{2},){15}[0-9A-F]{2}
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ı
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.
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.