2016-04-09 14 views
0

Bir faiz oranını doğrulamaya çalışırken sorun yaşıyorum. Koşullar şu şekildedir: (Mevcut olmalıdır. Sayısal olmalıdır. İzin verilen değerler: 3.000 ila 16.000 dahil).Sayıların bir dizesinde belirli değerler bulma

1 rakamdan sonra bir sayı olup olmadığını belirlemek için sorun yaşıyorum, eğer bir sonraki ise. yani "2N34" bir hata olarak gelmelidir. Her zaman bir for döngüsü kullanmayı denedim, sadece çalışmıyor. Birisi bunu test etmek ve doğru hatayı göndermek için doğru yönde bana işaret edebilir eğer merak ediyorum.

JAVASCRIPT İŞLEVİ: (giriş alanıdır)

function valIntRate(errMessages){ 

var rate = document.getElementById("intRate").value; 
if (rate.length === 0){ 
    errMessages += "Interest rate can't be left empty"; 
} 


if (rate < 3 || rate > 16){ 
     errMessages += "Rate must be between 3 and 16 inclusive"; 
} 

return errMessages; 
} 

HTML:

<label class="label"> Interest Rate </label> 

     <input type="text" name="intRate" id="intRate" size="7" maxlength="6" > 
+0

Kullanımı '&&' gibi parseFloat kullanabilirsiniz. – Nonemoticoner

+0

@Nonemoticoner Bu bağlamda mantıklı değil. && kullanımı, <3 _and_ rate> 16 oranının olup olmadığını sorar - ancak bu koşullardan yalnızca biri herhangi bir zamanda doğru olabilir, bu yüzden False değerini her zaman döndürür. –

+0

@AkshatMahajan Daha sonra da daha büyük olanların da yanlış olduğunu gördüm – Nonemoticoner

cevap

1

kullanım isNaN (giriş); sayısal değeri doğrulamak için Bu çalışmalı.

function valIntRate(errMessages) { 
var rate = document.getElementById("intRate").value; 
if (rate.length === 0) { 
    errMessages += "Interest rate can't be left empty"; 
} 
if (!(rate >= 3 && rate <= 16)) { 
    errMessages += "Rate must be between 3 and 16 inclusive"; 
} 
if (isNaN(rate)) { 
    errMessages += "Rate must be a number"; 
} 
return errMessages; 
} 
0

Kurallara bir dizi dayalı dizeleri eşleşebilir hangi regular expressions içine bakmak isteyebilirsiniz.

if (rate.match(/^\d*\.?\d+$/)) { 
    // rate only has numbers 
} else { 
    // rate has other characters 
} 

Düzenleme::

normal ifadeler kullanmaya izin verilmezse

, isNaN, typeof veya başka almanın doğasında Senin durumunda böyle bir şey sizin değeri yalnızca rakam olduğunu doğrulamak Bu amaç için işlevler içinde ve , karakter karakterine göre açıkça döngü yapmak için'a sahiptir (bu bir okul ödevidir, eğer ilk önce bunu çözmek için kendi denemenizi yüklerseniz iyi olur), daha sonra dize içinden geçebilirsiniz içeriği ve bir rakam veya ondalık olup olmadığını kontrol edin. (Ayrıca tek ondalık mevcut olmadığından emin olmak istiyoruz olasılıkla edeceğiz.)

İşte başlangıç ​​için bir şey:

var index, character; 
for (index = 0; index < rate.length; index += 1) { 

    character = rate[index]; 
    // Test to see if character is a digit or decimal here 

} 
+0

, RegEx'i kullanmasına izin verilmiyor. – 13design

+0

Tamam. Cevabımı güncelledim. – Mark

0

yerine `||` Bu

function valIntRate(errMessages) { 

    var val = document.getElementById("intRate").value 
    var rate = parseFloat(val); 
    if (rate.toString() != val) 
    // any letters will be removed so if there is anything not number or dot this will be true 
    { 
    errMessages += "Must be a number"; 
    } 
    if (rate.length === 0) { 
    errMessages += "Interest rate can't be left empty"; 
    } 


    if (rate < 3 || rate > 16) { 
    errMessages += "Rate must be between 3 and 16 inclusive"; 
    } 

    return errMessages; 
} 
İlgili konular