/ / Regex pre celé číslo vzoru, celé číslo alebo float - javascript, regex

Regex pre celé číslo, celé číslo alebo float - javascript, regex

Chcem overiť vstup do textového poľa pomocou regexu. Vzor by mal byť

integer, integer or float

takže platné položky môžu byť

1234, 1234
123, 123.45

a neplatné položky budú

abd, 123
123, abc
abc, abc

zatiaľ som to vyskúšal

var entry = "123,123.4"
var patt = new RegExp("^[0-9]+,(?:[d+(.d+]+,?){0,1}$");
res = patt.test(entry);

ale vracia sa nesprávne, hoci by sa malo vracať true

odpovede:

0 pre odpoveď č. 1

Nahradiť vás regExp týmto:

var reg = new RegExp("^[0-9]+,[0-9]+.?[0-9]*");

Myslím, že to je to, čo chcete.

Akceptovať medzeru za čiarkou:

var reg = new RegExp("^[0-9]+, [0-9]+.?[0-9]*");

Pre prípad 1a je potrebné na konci inzerovať $


2 pre odpoveď č. 2

Zdá sa, že ste trochu zmiešali druhú časť svojho regexu. ^d+,s*d+(?:.d+)?$ by malo byť to, čo potrebujete.

Tu je a Regex101 vzorky.

  • d+ zodpovedá jednej alebo viacerým čísliciam (celé číslo)
  • ,s* zhoduje sa s čiarkou, prípadne za ňou medzery
  • d+(?:.d+)? zhoduje sa s jednou alebo viacerými číslicami, prípadne za ňou nasleduje bodka a jedna alebo viac číslic (celé číslo alebo plavák)

Poznámka 1: Nezhoduje sa so zápornými číslami. Mohli by ste upraviť svoj regex na ^-?d+,s*-?d+(?:.d+)?$ ak je to potrebné

Poznámka 2: To sa nezhoduje .1 ako plavák, čo by mohol byť platný plavák. Mohli by ste upraviť svoj regex na ^d+,s*(?:d+|d*.d+)$ ak je to potrebné.


1 pre odpoveď č. 3

Prvý rozdelený reťazec „,“

var entry = "123,123.4";
var entryArray = entry.split(",");

potom iba skontrolujte položky položkyArray pomocou nasledujúcej funkcie, ktorú som získal odkaz

function isFloat(n) {
return n === +n && n !== (n|0);
}

function isInteger(n) {
return n === +n && n === (n|0);
}

A tu je celý recept

function isFloat(n) {
return n === +n && n !== (n|0);
}

function isInteger(n) {
return n === +n && n === (n|0);
}

function isValidInput(input){
if (!input) {return false};
var inputArray = input.split(",");
inputArray = inputArray.map(function(item){
return item.trim();
})
inputArray = inputArray.filter(function(n){
var number = parseFloat(n);
return number && (isInteger(parseFloat(n)) || isFloat(parseFloat(n)) )
})
return (inputArray.length === 2)
}
isValidInput("55,55.44");

0 pre odpoveď č. 4
^d+,s?d+.?d*$

Bude platné do

1234, 1234
123, 123.45

A je neplatné

abd, 123
123, abc
abc, abc