ইনপুট টাইপ = "নাম্বার" নেতিবাচক মান পেতে কোন উপায় আছে কি?


302

আমি কেবলমাত্র ইতিবাচক মান পেতে চাই, কেবলমাত্র এইচটিএমএল ব্যবহার করে এটি প্রতিরোধের কোনও উপায় আছে
দয়া করে বৈধতা পদ্ধতিটি প্রস্তাব করবেন না

ইনপুট নিয়ন্ত্রণের স্ক্রিনশট


3
এই থ্রেড অনেক ভালো পরিমাণ একই প্রশ্নের উত্তর stackoverflow.com/questions/31575496/...
PiotrWolkowski

উত্তর:


658

এর মতো minবৈশিষ্ট্যটি ব্যবহার করুন :

<input type="number" min="0">


222
এটি তীর বোতাম / স্পিনার ব্যবহার করে একটি নেতিবাচক সংখ্যা প্রবেশ করতে আটকাবে। তবে, ব্যবহারকারী এখনও ম্যানুয়ালি একটি নেতিবাচক সংখ্যায় প্রবেশ করতে পারেন এবং সেই ক্ষেত্রটির মানটি নেতিবাচক সংখ্যা হিসাবে পড়তে পারে, এইভাবে মিনিট অ্যাট্রিবিউটকে বাইপাস করে।
ecbrodie

52
@ দেমানিয়াক নং এবং অর্ধেক প্রশ্নের উত্তর রহস্যজনক হওয়ার পরে এই উত্তরটি এতগুলি উত্সাহ পেয়েছে কীভাবে
GôTô

1
@ আব্রাহাম কী হবে যদি ডেটা ফর্মের মধ্যে-মান সহ লোড হয়, এটি এটিকে লাল হিসাবে চিহ্নিত করে না।
কামিনী

2
এটি কাজ করে না, ব্যবহারকারী এখনও ম্যানুয়ালি একটি নেতিবাচক নম্বর প্রবেশ করতে পারে।
Altef চার

129

আমি @ অভ্রবমের উত্তরে সন্তুষ্ট নই কারণ:

এটি কেবল নেতিবাচক সংখ্যাগুলি উপরে / নীচে তীরগুলি থেকে প্রবেশ করা থেকে বিরত ছিল , যেখানে ব্যবহারকারী কীবোর্ড থেকে নেতিবাচক সংখ্যা টাইপ করতে পারেন।

সমাধানটি মূল কোড সহ রোধ করা হয় :

// Select your input element.
var number = document.getElementById('number');

// Listen for input event on numInput.
number.onkeydown = function(e) {
    if(!((e.keyCode > 95 && e.keyCode < 106)
      || (e.keyCode > 47 && e.keyCode < 58) 
      || e.keyCode == 8)) {
        return false;
    }
}
<form action="" method="post">
  <input type="number" id="number" min="0" />
  <input type="submit" value="Click me!"/>
</form>

@ হুগ গিনির দ্বারা ব্যাখ্যা সরবরাহ করা হয়েছে :

কী কোডগুলি চেক করা হচ্ছে:

  • 95, <106 নম্প্যাড 0 এর সাথে 9 এর সাথে মিল;
  • 47, <58 নম্বর রোতে 9 এর সাথে 9 এর সাথে মিল; এবং 8 হ'ল ব্যাকস্পেস।

সুতরাং এই স্ক্রিপ্টটি ইনপুটটিতে অবৈধ কী প্রবেশ করা থেকে বিরত করছে।


20
উত্সাহিত কিন্তু আমি মনে করি কী কী কোডগুলি যাচাই করা হচ্ছে তা স্পষ্ট করতে সহায়তা করবে:> 95, <106 নম্প্যাড 0 থেকে 9 এর সাথে মিল; > 47, <58 সংখ্যার সারিতে 0 থেকে 9 এর সাথে মিল; এবং 8 হ'ল ব্যাকস্পেস। সুতরাং এই স্ক্রিপ্টটি কোনও কীটি প্রবেশ করানো থেকে বিরত করছে। এটি পুরোপুরি তবে আমি মনে করি এটি সম্ভবত ব্রাউজারগুলির পক্ষে অতিরিক্ত সংখ্যার ইনপুটকে সমর্থন করে, যা ইতিমধ্যে বর্ণানুক্রমিক কীগুলি ফিল্টার করে ("e" এর মতো অক্ষর বাদে যার একটি সংখ্যাসূচক অর্থ থাকতে পারে)। এটি সম্ভবত 189 (ড্যাশ) এবং 109 (বিয়োগ) এর বিরুদ্ধে প্রতিরোধ করার জন্য যথেষ্ট। এবং তারপরে একত্রিত করুন min="0"
হিউ গিনি

1
@ মানওয়াল এটি কীবোর্ড ব্যবহার করে নম্বরগুলি অনুলিপি এবং আটকানোতে সীমাবদ্ধ করে। এবং আমাকে মাউস ব্যবহার করে নেগেটিভ নম্বরগুলি পেস্ট করার অনুমতি দেয়।
বেনিটন

1
@ বেনিটন ধন্যবাদ এই ব্যবহারের কেস দেওয়ার জন্য। আপনি কী করছেন সে সম্পর্কে আমাকে একটু ধারণা দিতে পারেন l সবসময় আমি আপনাকে সহায়তা করতে পারি। দয়া করে সামান্য চলমান কোড বা ফিডল সরবরাহ করুন। আপনার কোডে ফর্ম জমা দেওয়ার স্তরের বৈধতা থাকতে পারে। যদিও আমি সর্বদা ব্যাকএন্ডে চেক রাখি যদি আমি নেতিবাচক সংখ্যার অনুমতি না দিই।
মানওয়াল

1
মূলত ক্ষেত্রটিতে কেবল কপি-পেস্ট করুন। এটি আসলে কোনও বিশেষ মামলা বা কিছু নয়। কীকোডের মাধ্যমে বৈধতাটি পরিচালনা করার পরিবর্তে, অন চেঞ্জ বা ফোকাসআউট করা ভাল এবং কোনও নেতিবাচক সংখ্যার জন্য সামান্য বৈধতা ফাংশন তৈরি করা ভাল।
আলাইসিসর্মজ্রোচে

1
তীর কী (37, 38, 39, 41) এর শর্তও রাখা উচিত। || (e.keyCode>36 && e.keyCode<41)এটি ব্যবহারকারীকে উপরে / ডাউন তীরের মাধ্যমে সংখ্যা বাড়িয়ে / হ্রাস করতে দেয় এবং সংখ্যা সম্পাদনা করতে ডান / বাম দিকে যেতে দেয় না।
vusan

86

আমার জন্য সমাধানটি ছিল:

<input type="number" min="0" oninput="this.value = Math.abs(this.value)">

1
একবার কৌণিক দিয়ে প্যাটার্ন এবং নোফর্মডিয়েট ব্যবহার করার পরে সবচেয়ে ভাল সমাধান, যেহেতু সীমার মধ্যে না থাকলে মডেলটি আপডেট হয় না। আমার কেস:<input ng-model="row.myValue" type="{{row.code == 1 ? 'text' : 'number'}}" min="0" ng-pattern="..." noformvalidate oninput="if (this.type=='text') this.value=Math.abs(this.value) ">
সেবিয়াস

এটি সর্বোত্তম কাজ করে যখন ব্যবহারকারী জানেন ডিফল্ট মান 0 হয়। অন্যান্য বুদ্ধিমান ব্যবহারকারী ব্যাকস্পেসে বিভ্রান্ত হন কেন ক্ষেত্রটি সাফ হচ্ছে না। এটি বাদে এটি সেরা সমাধান। + 1
গভীর 3015

1
আপনি আমার দিন বাঁচিয়েছেন
স্ট্যাকমালাক্স

এটি সবচেয়ে ভাল কাজ করে, এবং দশমিক ব্যবহারের ক্ষেত্রেও। আমি উপরের অন্যান্য উত্তর ব্যবহার করেছি, দশমিকের অনুমতি দেওয়া হলে এটি কাজ করা বন্ধ করে দেয়। আমরা কি এই উত্তরটিকে এতটা উপরে নিয়ে যেতে পারি যাতে লোকেরা বেশিরভাগই এটি ব্যবহার করতে পারে।
সুবহান আহমেদ

31

এই কোডটি আমার পক্ষে ভাল কাজ করছে। আপনি কি চেক করতে পারেন:

<input type="number" name="test" min="0" oninput="validity.valid||(value='');">

2
এটি কাজ করে তবে আপনি টাইপ করার চেষ্টা করার পরে পুরো ইনপুটটি খালি করা -আসলে কোনও ভাল ধারণা নয়।
এক্সটেমল

9
@extempl এমন একটি ক্ষেত্র যেখানে সাধারণ জ্ঞানটি বোঝায় কোনও নেতিবাচকতা নেই এমন একটি নেতিবাচক প্রবেশ করার চেষ্টা করছে এমন ব্যবহারকারীকে ন্যায়বিচারের শাস্তির মতো মনে হচ্ছে।
খোফি

3
<input type="number" name="test" min="0" oninput="validity.valid||(value=value.replace(/\D+/g, ''))">- এটি সমস্ত অ-
অঙ্কিত

@ রেক্সফোর্ড আমি সম্মত, তবে আমি সেট করে min="0"রেখেছি যে কোনও নেতিবাচক নেই। আপনি যদি নেতিবাচক মান করতে চান তবে এই বৈশিষ্ট্যটি সরান।
চিন্মায় 235

1
আমি এটি চেষ্টা করেছিলাম কিন্তু এটি দশমিক পয়েন্ট সহ সংখ্যাগুলি প্রবেশ করা থেকেও বাধা দেয়।
ক্লেন্ট

21

সহজ পদ্ধতি:

<input min='0' type="number" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57">


সুন্দর এবং সহজ ... তবে তবুও, নেতিবাচক সংখ্যাগুলি আটকানো যেতে পারে।
রালফ

10

আমি দশমিক সংখ্যার অনুমতি দিতে চেয়েছিলাম এবং নেতিবাচক ইনপুট থাকলে পুরো ইনপুটটি সাফ করতে চাই না। এটি ক্রোমে অন্তত:

<input type="number" min="0" onkeypress="return event.charCode != 45">

কিভাবে এখানে আরও ascii নম্বর যুক্ত করতে পারেন। যেমন। 45 সাথে আমি 46 যোগ করতে চাই। এটা কিভাবে করা যায়?
প্রদীপ সিং

3
@PradeepSingh "রিটার্ন [45, 46] .indexOf (event.charCode) == -1"
ykay পুনর্বহাল মনিকা বলেছেন

বাক্স থেকে চিন্তা করুন। আপনি কি সত্যই নিশ্চিত যে কোনও keypressএকটি
ইনপুটটিতে

6

@ মনওয়াল উত্তরটি ভাল, তবে ভাল পাঠযোগ্যতার জন্য আমি কম লাইনের কোডের কোড পছন্দ করি। এছাড়াও আমি পরিবর্তে এইচটিএমএলে অনক্লিক / অনকাইপ্রেস ব্যবহার করতে চাই।

আমার প্রস্তাবিত সমাধান একই কাজ করে: যুক্ত করুন

min="0" onkeypress="return isNumberKey(event)"

এইচটিএমএল ইনপুট এবং

function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode;
    return !(charCode > 31 && (charCode < 48 || charCode > 57));
}

একটি জাভাস্ক্রিপ্ট ফাংশন হিসাবে।

যেমন বলা হয়েছে, এটি একই কাজ করে। সমস্যাটি কীভাবে সমাধান করা যায় সে সম্পর্কে এটি কেবল ব্যক্তিগত পছন্দ।


5

কেবলমাত্র রেফারেন্সের জন্য: jQuery এর সাহায্যে আপনি নিম্নলিখিত কোডের সাথে ফোকাসআউটে নেতিবাচক মানগুলি ওভাররাইট করতে পারেন:

$(document).ready(function(){
    $("body").delegate('#myInputNumber', 'focusout', function(){
        if($(this).val() < 0){
            $(this).val('0');
        }
    });
});

এটি সার্ভারের পাশের বৈধতা প্রতিস্থাপন করে না!


যদি ব্যবহারকারী ইনপুট ক্ষেত্রের বাইরে ফোকাস করে তবে এটি সূক্ষ্মভাবে কাজ করে , তবে তারা যদি ক্ষেত্রের মধ্যে এখনও অবিলম্বে এন্টার টিপায়; তারা এখনও একটি নেতিবাচক নম্বর লিখতে পারেন।
NemyaNation

3

এখানে একটি কৌণিক 2 সমাধান রয়েছে:

ওয়ালনম্বার একটি ক্লাস তৈরি করুন

import {Directive, ElementRef, HostListener} from '@angular/core';

@Directive({
  selector: '[OnlyNumber]'
})
export class OnlyNumber {

  // Allow decimal numbers. The \. is only allowed once to occur
  private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g);

  // Allow key codes for special events. Reflect :
  // Backspace, tab, end, home
  private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home'];

  constructor(private el: ElementRef) {
  }

  @HostListener('keydown', ['$event'])
  onKeyDown(event: KeyboardEvent) {
    // Allow Backspace, tab, end, and home keys
    if (this.specialKeys.indexOf(event.key) !== -1) {
      return;
    }

    // Do not use event.keycode this is deprecated.
    // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    let current: string = this.el.nativeElement.value;
    // We need this because the current value on the DOM element
    // is not yet updated with the value from this event
    let next: string = current.concat(event.key);
    if (next && !String(next).match(this.regex)) {
      event.preventDefault();
    }
  }
}

App.module.ts এ ঘোষণাপত্রের মধ্যে কেবল সংখ্যাটি যুক্ত করুন এবং আপনার অ্যাপ্লিকেশনটিতে যে কোনও জায়গায় এটির মতো ব্যবহার করুন

<input OnlyNumber="true">

এর জন্য আটকানোর অনুমতি দেওয়ার কোনও উপায় আছে কি? এছাড়াও আমি নেতিবাচক সংখ্যার মঞ্জুরি দেওয়ার জন্য রেজেক্সটিকে: /^-??l0-9 +++\[ 0/০9-৯১৫/২০১{-০,১}$/g এ পরিবর্তন করেছি, তবে মনে হচ্ছে এটি কাজ করে না?
ডেভ নোটেজ

2
oninput="this.value=(this.value   < Number(this.min) || this.value   > Number(this.max))  ? '' : this.value;"

2
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
Sudheesh Singanamalla

যদিও এটি সঠিক উত্তর হতে পারে তবে এর যথেষ্ট বিশদ নেই। কেন এটি কাজ করে দয়া করে তা ব্যাখ্যা করুন । স্ট্যাক ওভারফ্লো ব্যবহার করার সময়, বিবেচনা করুন যে এটি একটি জীবিত জ্ঞানের ভিত্তি , উত্তরগুলি যা জ্ঞান ভাগ করে না দেয় সেগুলি খুব কম কার্যকর।
মার্ক লাফলার

2

আপনি আরও বেশি কোড সহ এইচটিএমএলকে ময়লা করতে না চাইলে এটি করার আরও একটি উপায় যুক্ত করুন (কৌণিক ব্যবহার করে) :

আপনাকে কেবলমাত্র ক্ষেত্রের মান পরিবর্তন করতে হবে এবং মানটিকে একটি নিরঙ্কুশ মান হিসাবে সেট করতে হবে (নতুন ইভেন্ট নির্গত না হওয়ার বিষয়ে যত্ন নেওয়া কারণ এটি অন্য মানকে পরিবর্তিত করবে তাই একটি পুনরাবৃত্তি কল এবং সর্বাধিক কল আকারকে ত্রুটি ছাড়িয়ে যাবে)

এইচটিএমএল কোড

<form [formGroup]="myForm">
    <input type="number" formControlName="myInput"/>
</form>

টাইপস্ক্রিপ্ট কোড (আপনার উপাদান ভিতরে)

formGroup: FormGroup;

ngOnInit() { 
    this.myInput.valueChanges 
    .subscribe(() => {
        this.myInput.setValue(Math.abs(this.myInput.value), {emitEvent: false});
    });
}

get myInput(): AbstractControl {
    return this.myForm.controls['myInput'];
}

1

<input type="number" name="credit_days" pattern="[^\-]+" 
    #credit_days="ngModel" class="form-control" 
    placeholder="{{ 'Enter credit days' | translate }}" min="0" 
    [(ngModel)]="provider.credit_days"
    onkeypress="return (event.charCode == 8 || event.charCode == 0 || 
    event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 
    57" onpaste="return false">


1

এর উত্তর সহায়ক নয়। এটি কেবলমাত্র যখন আপনি উপরে / ডাউন কীগুলি ব্যবহার করেন তখনই কাজ করে তবে আপনি যদি -11 টাইপ করেন তবে এটি কার্যকর হবে না। সুতরাং এখানে আমি ব্যবহার করছি একটি ছোট ফিক্স

এটি পূর্ণসংখ্যার জন্য

  $(".integer").live("keypress keyup", function (event) {
    //    console.log('int = '+$(this).val());
    $(this).val($(this).val().replace(/[^\d].+/, ""));
    if (event.which != 8 && (event.which < 48 || event.which > 57))
    {
        event.preventDefault();
    }
   });

এটি যখন আপনার দামের সংখ্যা থাকে

        $(".numeric, .price").live("keypress keyup", function (event) {
     //    console.log('numeric = '+$(this).val());
    $(this).val($(this).val().replace(/[^0-9\,\.]/g, ''));

    if (event.which != 8 && (event.which != 44 || $(this).val().indexOf(',') != -1) && (event.which < 48 || event.which > 57)) {
        event.preventDefault();
    }
   });

0

এই সমাধানটি কীবোর্ড সহ অনুলিপি পেস্ট সহ সমস্ত কীবোর্ড কার্যকারিতা মঞ্জুরি দেয়। এটি মাউসের সাহায্যে নেতিবাচক সংখ্যাগুলি আটকানো রোধ করে। এটি কোডেসে সমস্ত ব্রাউজার এবং ডেমো দিয়ে কাজ করে বুটস্ট্র্যাপ এবং jQuery ব্যবহার করা হয়। এটি অ-ইংরেজি ভাষার সেটিংস এবং কীবোর্ডগুলির সাথে কাজ করা উচিত। যদি ব্রাউজারটি পেস্ট ইভেন্ট ক্যাপচার (আইই) সমর্থন করে না, তবে এটি ফোকাস আউট করার পরে নেতিবাচক চিহ্নটি সরিয়ে ফেলবে। এই সমাধানটি নূন্যতম = 0 টাইপ = সংখ্যা সহ নেটিভ ব্রাউজারের মতো আচরণ করে।

মার্কআপ:

<form>
  <input class="form-control positive-numeric-only" id="id-blah1" min="0" name="nm1" type="number" value="0" />
  <input class="form-control positive-numeric-only" id="id-blah2" min="0" name="nm2" type="number" value="0" />
</form>

জাভাস্ক্রিপ্ট

$(document).ready(function() {
  $("input.positive-numeric-only").on("keydown", function(e) {
    var char = e.originalEvent.key.replace(/[^0-9^.^,]/, "");
    if (char.length == 0 && !(e.originalEvent.ctrlKey || e.originalEvent.metaKey)) {
      e.preventDefault();
    }
  });

  $("input.positive-numeric-only").bind("paste", function(e) {
    var numbers = e.originalEvent.clipboardData
      .getData("text")
      .replace(/[^0-9^.^,]/g, "");
    e.preventDefault();
    var the_val = parseFloat(numbers);
    if (the_val > 0) {
      $(this).val(the_val.toFixed(2));
    }
  });

  $("input.positive-numeric-only").focusout(function(e) {
    if (!isNaN(this.value) && this.value.length != 0) {
      this.value = Math.abs(parseFloat(this.value)).toFixed(2);
    } else {
      this.value = 0;
    }
  });
});

0

এখানে এমন একটি সমাধান রয়েছে যা আমার পক্ষে সবচেয়ে ভাল কাজ করেছে QTY ক্ষেত্রের জন্য যা কেবলমাত্র সংখ্যার অনুমতি দেয়।

// Only allow numbers, backspace and left/right direction on QTY input
    if(!((e.keyCode > 95 && e.keyCode < 106) // numpad numbers
        || (e.keyCode > 47 && e.keyCode < 58) // numbers
        || [8, 9, 35, 36, 37, 39].indexOf(e.keyCode) >= 0 // backspace, tab, home, end, left arrow, right arrow
        || (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + A
        || (e.keyCode == 67 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + C
        || (e.keyCode == 88 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + X
        || (e.keyCode == 86 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + V
    )) {
        return false;
    }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.