JavaScript-dagi harflar belgisini qanday aniqlash mumkin?

Veb-saytimda bir nechta HTML yozuvlari bor. Ular ariza ichidadir, ammo ariza serverga yuborilmaydi. Aksincha, kirishlar va tanlangan variantlardan kelib chiqqan holda mahsulot kodini birgalikda «tiklash» uchun turli xil kiritilgan ma'lumotlar (raqam kiritish, matn kiritish va tasdiqlash qutilari) ishlatiladi. (JavaScript dan foydalangan holda)

Mening muammom bu: raqam kiritilganda

<input type='number'/>

faqat server tarafida topshirilganda foydalanilsa, raqam qiymatiga ruxsat beradi, men turli xil kiritmalarning turli xil qiymatlarini tekshirish uchun JavaScript dan foydalanmoqdaman. Bu raqam kiritish uchun harf (alifboda) belgi qo'yish imkonini beradi. Agar buni amalga oshirsangiz, kiritma qizil rangda ko'rsatiladi, ammo u mahsulot kodini izlashga chorlaydigan funktsiyaga imkon beradi.

Menga kerak bo'lgan narsa, ma'lum bir satrning faqat raqamlar o'rniga alfavitik belgi bo'lganligini aniqlashning bir usuli hisoblanadi. Mening fikrim shunday edi:

<input type='number' id='inp' />
<script>
input=document.getElementById('inp');
val=input.value;
checkforletters(val);
input.onchange=function(){
  if(checkforletters){
//resetting the value to blank if there is an alphabet character in the string
    input.value='';
  }
}
</script>

Siz u erda qidirilayotgan vazifani ko'rasiz

checkforletters()

Men buni yozmaganman. Bu funksiya tekshiradi va men kiritilgan qiymatdan keladigan satrda alfavit belgisi mavjudligini tekshiradi va tekshiradi; va agar mavjud bo'lsa, funktsiya to'g'ri bo'ladi.

Bu funktsiya menga kerak. Kodning qolgan qismi alfavit belgisi bo'lsa, kiritilgan qiymatning qiymatini qayta tiklaydi.

Xullas, qisqacha aytganda, menga kerak bo'lgan narsa - bu mag'lubiyat argument sifatida qabul qilinganida, unda alifbo xati bor bo'lsa, unda haqiqiydir va aks holda yolg'ondir.

Eslatma

Faqat sof JavaScript-dan foydalaning. Yo'q jQuery yoki boshqa kutubxonalar/ramkalar.

3
Agar siz raqamni kiritish elementining qiymatining haqiqiy yoki haqiqiy emasligini tekshirib ko'rsangiz, agar u noto'g'ri bo'lsa, qaytarilgan qiymat bo'sh satr bo'ladi. Bu, aslida, kiritilgan qiymatning haqiqiy emasligini tekshirish mumkin emasligini anglatadi. Kirish elementining haqiqiyligini tekshirishning to'g'ri usuli uchun quyidagi javobni ko'ring.
qo'shib qo'ydi muallif Tiny Giant, manba

6 javoblar

Siz isNaN() dan foydalanishingiz mumkin. funktsiyasi o'zingizning funktsiyangizni bajarish uchun berilgan satrni raqamli ekanligini tekshiradi:

//Will return true if the given string is number, false if is contain characters
function isNumeric(yourString){
    return !isNaN(yourString)
}

Umid qilamanki bu yordam.

3
qo'shib qo'ydi
Shuningdek, agar raqam kiritish qiymati bekor bo'lsa, qaytarilgan qiymat bo'sh qiymatga ega bo'ladi, NaN emas, hatto noto'g'ri bo'lsa ham funktsiyangiz haqiqiy bo'ladi. Funktsiyangiz sizning fikringizni so'raydi, masalan, mag'lubiyatning raqamli yoki yo'qligini tekshirish, lekin bu erda keltirilgan X Y muammosini hal qilmaydi. X Y muammoni raqam kiritishda qiymat bo'sh qiymatni bekor qilgan holda bo'sh qiymatni qaytaradi. Masalan, bu JSFiddle'ni ko'ring
qo'shib qo'ydi muallif Tiny Giant, manba
Izoh: isNaN ('4e5') , isNaN ('40 000 ') , isNaN ('20, 000') , isNaN isNaN tekshiruvi joriy javascriptning haqiqiyligini tekshiradi, chunki false, true, true, false ) kutilmagan natijalar berishi mumkin. Odamlar tomonidan qo'llanadigan har bir raqam formati haqiqiy emas, balki JavaScript-ni to'g'ri keladigan raqam emas, balki har bir mavjud bo'lgan JavaScript-ni raqamning tamg'asi texnik asosga ega bo'lmagan asosiy odamlar uchun intuitivdir.
qo'shib qo'ydi muallif Ginden, manba

Mening muammom bu: raqam kiritish faqat server tomonidan taqdim etilganida foydalanilganda raqamga imkon beradi, men turli xil kirishlarning turli xil qiymatlarini tekshirish uchun JavaScript dan foydalanmoqdaman. Bu raqam kiritish uchun harf (alifboda) belgi qo'yish imkonini beradi. Agar siz buni amalga oshirsangiz, kirish qizil rangda belgilanadi, ammo bu mahsulot kodi deb ataladigan funktsiyaga imkon beradi.

Ichki HTML5 cheklovlarni tekshirishda foydalanishingiz mumkin JavaScript bilan. Bu shuni anglatadiki, qiymatning haqiqiyligini tekshirish o'rniga, qiymat boshlanishi uchun bekor bo'lmaydi.

Quyidagi misol foydalanuvchi darajasida noto'g'ri kiritishni bekor qiladi. Buni, agar u tegishli bo'lsa, kelajakda ishlatish uchun qiymatni saqlab, keyin valyutaning haqiqiyligini tekshirib, agar qiymat to'g'ri bo'lmasa, qiymat mavjud bo'lsa, bundan avval saqlangan joriy qiymatga o'rnatmasa, bo'sh satr bo'lsa.

Bu shuni anglatadiki, qiymat hech qachon haqiqiy emas.

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

<input type="number"
       oninput="(validity.valid&&(dataset['prev']=value))||(value=dataset['prev'])">
</div> </div>

Inline JavaScript-ni ishlatmasdan, xuddi shu usul

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

document.getElementById('test').oninput = function() {  
  if(this.validity.valid) this.dataset['prev'] = this.value;
  else this.value = this.dataset['prev'];
}
<input type="number" id="test">
</div> </div>

Shunday qilib, kerakli narsa - bu mag'lubiyat argument sifatida qabul qilinganida, agar alfavit harflari mavjud bo'lsa, u noto'g'ri bo'lib, boshqa holatda esa funktsiyani qaytaradi.

Agar raqam kiritish qiymati noto'g'ri bo'lsa, u bo'sh satrni qaytaradi.

Bu shuni anglatadiki, qaytarilgan qiymatni uning haqiqiyligini tekshirish uchun solishtirolmaysiz, chunki aslida bekor qiymat qaytarilgan qiymat bo'sh satr bo'ladi.

Quyidagi misol ko'rsatadiki, agar qiymat noto'g'ri bo'lsa ham, uni isNaN bilan tekshirish sizni ko'rsatmaydi va bu erda ko'rsatilgan boshqa usullardan hech biri ko'rsatilmaydi.

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

<input type="number" oninput="document.getElementById('value').textContent = value; document.getElementById('isnum').textContent = !isNaN(value)">
Returned Value:
Is a number:
</div> </div>

If you really want to validate the input element while running your script, you can check the input element's validity at that time.

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

var test = document.getElementById('test');
document.getElementById('button').onclick = function(e) {
    if(!test.validity.valid) {
        alert('Its Invalid!');
    } else {
        alert('Its valid!');
    }
}
<input id="test" type="number"><button id="button">Check It</button>
</div> </div>

Shu bilan bir qatorda, sizning kirish ma'lumotlaringiz ariza ichidadir va siz ariza topshirish hodisasida skriptingizni ishlatsangiz, u siz uchun avtomatik ravishda sizni tasdiqlaydi va qiymati tegishli bo'lmasa, yuborishga ruxsat bermaydi.

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

var test = document.getElementById('test');
document.getElementById('form').onsubmit = function(e) {
  e.preventDefault();
  alert("Its valid!");//this will only happen if the inputs are valid.
}
<form id="form"><input id="test" type="number"><button>Check It</button></form>
</div> </div>
3
qo'shib qo'ydi

Bu erda eng oddiy usul: onkeyup :( http://jsfiddle.net/vittore/g7xe0drp/ )

var inp2= document.getElementById('inp2')

inp2.onkeydown = onlyNumbers

function onlyNumbers(e) { 
    console.log(e)
    if (e.which <=49 || e.which >=57) {
        e.preventDefault()
        return false;
    }

}
1
qo'shib qo'ydi
@blex siz buni jsfiddle da sinashingiz mumkin.
qo'shib qo'ydi muallif vittore, manba
@blex, lekin foydalanuvchi foydalanuvchi raqamini ham joylashtirolmaydi.
qo'shib qo'ydi muallif vittore, manba
Agar foydalanuvchi u erda bir String nusxa ko'chirsa/qo'ysa nima bo'ladi?
qo'shib qo'ydi muallif blex, manba
Raqamni nusxalash va yapıştırdığımda raqami yapıştırılır. Lekin salom -ni nusxalash va joylashtirganda, u e ni yozishga imkon beradi. (Chrome'da)
qo'shib qo'ydi muallif blex, manba

Jo'natishda faqat raqamlar mavjudligini tekshiring (\ d):

function checkforletters(val) {
    var pattern = /^\d+$/;
    return pattern.test(val);
}

\ d o'rniga raqamlar yonidagi boshqa belgilarga kerak bo'lsa, [\ d, -] dan foydalaning (va siz ruxsat berish kerak bo'lgan belgilar).

0
qo'shib qo'ydi

Narsasiz raqamlarga mos keladigan muntazam ifodani kiriting.

var myString = 'aaaaa1';
var reg = new RegExp(/\D+/); 
console.log(reg.test(myString));
// true
0
qo'shib qo'ydi
Keyinchalik, bu tartibni buzadigan yoki saqlaydigan isNaN ishlatadigan, chunki bularning barchasini qila oladigan hech qanday ma'noga ega bo'lmagan yoki haqiqiy libni ishlatadigan juda zerikarli uzun regexdan foydalaning.
qo'shib qo'ydi muallif Henrik Andersson, manba
U suzuvchi qiymatlarni ishlatmoqchi bo'lsa nima bo'ladi?
qo'shib qo'ydi muallif blex, manba

Iltimos, buni kiritishda alifbo yoki maxsus belgilarni tekshirish uchun foydalaning:

checkforletters(val){
    var pattern = /[\D]+/

    if (pattern.test(val)) {
       //val contains a non-digit character, it contains alphabet or special character
    }
    else{
   //val only contains digits
    }
}

pattern.test (val) val faqat alfavit bo'lsa, u rost bo'ladi

0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb