hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));
Ich bekomme sowohl bei "123"
als auch bei "123f"
falsch. Ich möchte prüfen, ob der Hash nur Zahlen enthält. Habe ich etwas verpasst?
var reg = /^\d+$/;
sollte es tun. Das Original stimmt mit allem überein, was aus genau einer Ziffer besteht.
Wie Sie sagten, möchten Sie, dass Hash nur Zahlen enthält.
var reg = new RegExp('^[0-9]+$');
oder
var reg = new RegExp('^\\d+$');
\d
und [0-9]
bedeuten beide dasselbe . Das verwendete + bedeutet, dass nach einem oder mehreren Vorkommen von [0-9] gesucht wird.
Dies erlaubt auch vorzeichenbehaftete und Float-Nummern oder leere Zeichenfolgen:
var reg = /^-?\d*\.?\d*$/
Wenn Sie die Zeichenfolge nicht leeren möchten, verwenden Sie diese:
var reg = /^-?\d+\.?\d*$/
var validation = {
isEmailAddress:function(str) {
var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return pattern.test(str); // returns a boolean
},
isNotEmpty:function (str) {
var pattern =/\S+/;
return pattern.test(str); // returns a boolean
},
isNumber:function(str) {
var pattern = /^\d+$/;
return pattern.test(str); // returns a boolean
},
isSame:function(str1,str2){
return str1 === str2;
}
};
alert(validation.isNotEmpty("dff"));
alert(validation.isNumber(44));
alert(validation.isEmailAddress("[email protected]"));
alert(validation.isSame("sf","sf"));
Dies ist ein extremer Overkill für Ihre Zwecke, aber ich verwende Folgendes:
var numberReSnippet = "(?:NaN|-?(?:(?:\\d+|\\d*\\.\\d+)(?:[E|e][+|-]?\\d+)?|Infinity))";
var matchOnlyNumberRe = new RegExp("^("+ numberReSnippet + ")$");
Meines Wissens entspricht dies allen Variationen der Zahlen, die Java und JavaScript je auf Sie werfen, einschließlich "-Infinity", "1e-24" und "NaN". Es stimmt auch mit Zahlen überein, die Sie eingeben könnten, z. B. "-.5".
Wie geschrieben, ist reSnippet so konzipiert, dass es in andere reguläre Ausdrücke eingefügt wird, sodass Sie Zahlen extrahieren (oder vermeiden) können. Trotz aller Klammern enthält es keine Erfassungsgruppen. Daher stimmt "matchOnlyNumberRe" nur mit Zeichenfolgen überein, die Zahlen sind, und verfügt über eine Erfassungsgruppe für die gesamte Zeichenfolge.
Hier sind die Jasmin-Tests, damit Sie sehen können, was es tut und was nicht:
describe("Number Regex", function() {
var re = new RegExp("^("+ numberReSnippet + ")$");
it("Matches Java and JavaScript numbers", function() {
expect(re.test( "1")).toBe(true);
expect(re.test( "0.2")).toBe(true);
expect(re.test( "0.4E4")).toBe(true); // Java-style
expect(re.test( "-55")).toBe(true);
expect(re.test( "-0.6")).toBe(true);
expect(re.test( "-0.77E77")).toBe(true);
expect(re.test( "88E8")).toBe(true);
expect(re.test( "NaN")).toBe(true);
expect(re.test( "Infinity")).toBe(true);
expect(re.test( "-Infinity")).toBe(true);
expect(re.test( "1e+24")).toBe(true); // JavaScript-style
});
it("Matches fractions with a leading decimal point", function() {
expect(re.test( ".3")).toBe(true);
expect(re.test( "-.3")).toBe(true);
expect(re.test( ".3e-4")).toBe(true);
});
it("Doesn't match non-numbers", function() {
expect(re.test( ".")).toBe(false);
expect(re.test( "9.")).toBe(false);
expect(re.test( "")).toBe(false);
expect(re.test( "E")).toBe(false);
expect(re.test( "e24")).toBe(false);
expect(re.test( "1e+24.5")).toBe(false);
expect(re.test("-.Infinity")).toBe(false);
});
});
^[0-9]$
... ist ein regulärer Ausdruck, der mit einer einzelnen Ziffer übereinstimmt. 1 gibt also true zurück, aber 123 gibt false zurück.
Wenn Sie den Quantifizierer * hinzufügen,
^[0-9]*$
der Ausdruck passt auf beliebige Ziffernfolgen und 123 gibt true zurück. (123f gibt immer noch false zurück).
Beachten Sie, dass eine leere Zeichenfolge technisch eine 0-Zeichenfolge von Ziffern ist. Daher wird sie mit ^ [0-9] * $ zurückgegeben.
^[0-9]+$
Wie die vielen anderen darauf hingewiesen haben, gibt es mehrere Möglichkeiten, dies zu erreichen, aber es schien mir angebracht, darauf hinzuweisen, dass der Code in der ursprünglichen Frage nur einen einzigen zusätzlichen Buchstaben benötigt, um wie beabsichtigt zu funktionieren.
Diese Funktion prüft, ob ihre Eingabe im klassischen Sinne numerisch ist, da erwartet wird, dass eine normale Zahlenerkennungsfunktion funktioniert.
Dies ist ein Test, den Sie beispielsweise für die HTML-Formulareingabe verwenden können.
Es umgeht die gesamte JS-Folklore, wie tipeof (NaN) = number, parseint ('1 Kg') = 1, boolesche Zahlen zu Zahlen und dergleichen.
Dazu wird das Argument als String dargestellt und der String mit einem Regex wie dem von @ codename- geprüft, wobei Einträge wie 5. und .5 zulässig sind
function isANumber( n ) {
var numStr = /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/;
return numStr.test( n.toString() );
}
not numeric:
Logger.log( 'isANumber( "aaa" ): ' + isANumber( 'aaa' ) );
Logger.log( 'isANumber( "" ): ' + isANumber( '' ) );
Logger.log( 'isANumber( "lkjh" ): ' + isANumber( 'lkjh' ) );
Logger.log( 'isANumber( 0/0 ): ' + isANumber( 0 / 0 ) );
Logger.log( 'isANumber( 1/0 ): ' + isANumber( 1 / 0 ) );
Logger.log( 'isANumber( "1Kg" ): ' + isANumber( '1Kg' ) );
Logger.log( 'isANumber( "1 Kg" ): ' + isANumber( '1 Kg' ) );
Logger.log( 'isANumber( false ): ' + isANumber( false ) );
Logger.log( 'isANumber( true ): ' + isANumber( true ) );
numeric:
Logger.log( 'isANumber( "0" ): ' + isANumber( '0' ) );
Logger.log( 'isANumber( "12.5" ): ' + isANumber( '12.5' ) );
Logger.log( 'isANumber( ".5" ): ' + isANumber( '.5' ) );
Logger.log( 'isANumber( "5." ): ' + isANumber( '5.' ) );
Logger.log( 'isANumber( "-5" ): ' + isANumber( '-5' ) );
Logger.log( 'isANumber( "-5." ): ' + isANumber( '-5.' ) );
Logger.log( 'isANumber( "-.5" ): ' + isANumber( '-5.' ) );
Logger.log( 'isANumber( "1234567890" ): ' + isANumber( '1234567890' ));
Erklärung der Regex:
/^-?(\d+\.?\d*)$|(\d*\.?\d+)$/
Das erste "^" und das letzte "$" stimmen mit dem Anfang und dem Ende der Zeichenfolge überein, um sicherzustellen, dass die Prüfung die gesamte Zeichenfolge umfasst. Das "-?" Teil ist das Minuszeichen mit dem "?" Multiplikator, der null oder eine Instanz davon erlaubt.
Dann gibt es zwei ähnliche Gruppen, die durch Klammern abgegrenzt sind. Die Zeichenfolge muss mit einer dieser Gruppen übereinstimmen. Die erste entspricht Zahlen wie 5. und die zweite .5
Die erste Gruppe ist
\d+\.?\d*
Das "\ d +" stimmt mit einer Ziffer (\ d) einmal oder mehrmals überein.
Das "\.?" ist der Dezimalpunkt (mit "\" gekennzeichnet, um ihn seiner Magie zu entziehen), null oder einmal.
Der letzte Teil "\ d *" ist wieder eine Ziffer, null oder mehrmals.
Alle Teile sind optional, aber die erste Ziffer, daher werden in dieser Gruppe Zahlen wie 5 und nicht 0,5 angegeben, denen die andere Hälfte entspricht.
Wenn Sie nur positive Ganzzahlen benötigen und keine führenden Nullen benötigen (z. B. "0001234" oder "00"):
var reg = /^(?:[1-9]\d*|\d)$/;
Warum verwenden Sie nicht etwas wie:
$.isNumeric($(input).val())
Ist jquery getestet, und der häufigste Fall wird geprüft
Wenn die Zahlen nicht absurd groß sein sollen, verwenden Sie vielleicht:
new RegExp(
'^' + // No leading content.
'[-+]?' + // Optional sign.
'(?:[0-9]{0,30}\\.)?' + // Optionally 0-30 decimal digits of mantissa.
'[0-9]{1,30}' + // 1-30 decimal digits of integer or fraction.
'(?:[Ee][-+]?[1-2]?[0-9])?' + // Optional exponent 0-29 for scientific notation.
'$' // No trailing content.
)
Dies versucht einige Szenarien zu vermeiden, nur für den Fall:
1E-323
.Infinity
übergeben, wenn eine endliche Zahl erwartet wird (versuchen Sie 1E309
oder -1E309
).Sie benötigen den *
, damit "null oder mehr des vorherigen Zeichens" angezeigt wird, und dies sollte dies tun:
var reg = new RegExp('^\\d*$');
Wenn Sie bei der Eingabe andere Zeichen herausfiltern und nur Zahlen im Eingabefeld anzeigen möchten, können Sie den Wert des Felds bei der Eingabe durch tippen:
var yourInput = jQuery('#input-field');
yourInput.keyup(function() {
yourInput.val((yourInput.val().replace(/[^\d]/g,'')))
})
Sie können auch die folgenden Methoden verwenden, sich jedoch ihrer internen Implementierungs- und/oder Rückgabewerte bewusst sein.
1A isNaN(+'13761123123123'); // returns true
1B isNaN(+'13761123123ABC'); // returns false
2A ~~'1.23'; // returns 1
2B ~~'1.2A'; // returns 0
Für 1A und 1B wird der String zuerst mit dem +
-Operator erzwungen, bevor er an die isNaN()
-Funktion übergeben wird. Dies funktioniert, weil Zahlentypen, die nicht numerische Werte enthalten, NaN
zurückgeben. Es gibt Überlegungen zu den isNaN()'s
-Implementierungsdetails, die hier dokumentiert sind. Eine Überlegung ist, wenn ein boolescher Wert übergeben wird, da isNaN(+false|true)
zu ihren numerischen Äquivalenten gezwungen wird und daher false
zurückgegeben wird. Es kann jedoch davon ausgegangen werden, dass die Funktion true
zurückgibt, da der boolesche Wert nicht im Sinne unserer Tests numerisch ist.
Für 2A und 2B ist es erwähnenswert, dass das Finden des Komplements der Zahl erfordert, dass der betreffende Wert innerhalb des Bereichs der Werte einer 32-Bit-Ganzzahl mit Vorzeichen liegt, auf die in der spec verwiesen werden kann.
Meine persönliche Vorliebe ist, obwohl sie als weniger lesbar geltend gemacht werden könnte, da sie den unären Operator enthält, aufgrund der Schnelligkeit und Prägnanz 1A & 1B.
Einfaches Regex-Javascript
var cnpj = "12.32.432/1-22".replace(/\D/gm,"");
console.log(cnpj);
* Ergebnis :
1232432122
Überprüft nur für Zahlen:
if(cnpj.length > 0){
return true;
}
Einfaches Beispiel
if("12.32.432/1-22".replace(/\D/gm,"").length > 0){
console.log("Ok.");
}
Vielleicht funktioniert es:
let a = "1234"
parseInt(a) == a // true
let b = "1234abc"
parseInt(b) == b // false
\d stimmt nicht mit dem Dezimalpunkt überein. Verwenden Sie für die Dezimalstelle Folgendes.
const re = /^[0-9.]+$/
'123'.match(re) // true
'123.3'.match(re) // true
'123!3'.match(re) // false
Wie Sie sehen, haben Sie bereits viele Antworten erhalten. Wenn Sie jedoch nach einem regulären Ausdruck suchen, der mit ganzen Zahlen und Gleitkommazahlen übereinstimmt, funktioniert dieser für Sie:
var reg = /^-?\d*\.?\d+$/;