簡體   English   中英

正則表達式僅匹配 JS 中的長整數

[英]Regex to match only long integers in JS

我需要創建一個正則表達式來驗證長 integer輸入並確保它們是長 integer 正值 這意味着有效范圍應在09223372036854775807之間

有一種方法可以創建正則表達式,而無需通過范圍手動添加所有有效數字(即\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM