[英]Regex to match only long integers in JS
我需要創建一個正則表達式來驗證長 integer輸入並確保它們是長 integer 正值。 這意味着有效范圍應在0
到9223372036854775807
之間
有一種方法可以創建正則表達式,而無需通過范圍手動添加所有有效數字(即\d{0,18} | [1-8]\d{0,18} | 9[0-1]\d{0,17} | 92[0-1]\d{0,16}...
)?
正如我在評論中所說,您所擁有的是(接近)使用正則表達式的最佳方法。 這通常不僅僅由正則表達式處理。 這是最簡單的方法:
function validateLongInt(str) { return str.match(/^\d+$/) && BigInt(str) <= 9223372036854775807n; } console.log(validateLongInt("0")) // truthy console.log(validateLongInt("1")) // truthy console.log(validateLongInt("9223372036854775807")) // truthy console.log(validateLongInt("-1")) // falsy console.log(validateLongInt("9223372036854775808")) // falsy console.log(validateLongInt("A")) // falsy console.log(validateLongInt("")) // falsy
請注意,您不能與常規 JavaScript 數字(或至少不是天真地)進行此比較,因為您對安全 integer 范圍之外的數字感興趣:
const max = 9223372036854775807; console.log(max + 1 > max); // false???
不是純正則表達式解決方案,但除了使用正則表達式驗證它“看起來”是否在范圍內之外,您還可以遍歷字符串的每個索引並將其值與目標字符串進行比較。
const MAX_VALUE = "9223372036854775807";
const lengthCheck = new RegExp(`^\\d{1,${MAX_VALUE.length}}$`);
function validateLongPositiveInteger(value) {
if (!lengthCheck.test(value)) {
return false;
}
for (let i = 0; i < MAX_VALUE.length; i++) {
if (value[i] > MAX_VALUE[i]) {
return false;
}
if (value[i] < MAX_VALUE[i]) {
return true;
}
}
return true;
}
如果 reg exp 不是硬性要求,那么還有另一種方法可以進行驗證:
const isValidPositiveLongNumber = (input: string | number | undefined, maxValue = 9223372036854775807): boolean => {
if (input === undefined || input === null) {
return false;
}
const parsed = parseInt(input);
if (isNaN(parsed)) {
return false;
}
return parsed >= 0 && parsed <= maxValue;
}
console.log(isValidPositiveLongNumber("-6789"));
console.log(isValidPositiveLongNumber("12423554"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.