簡體   English   中英

如何判斷 javascript 字符串是數字還是日期?

[英]How can I tell if a javascript string is a number OR a date?

我有一個可能是字符串化日期或數字的值。 我想以不同的方式處理每種情況。

日期值可以是任何可以被日期庫解析的有效日期字符串,比如 dayjs。 例如:“2020 年 10 月 10 日"10/10/2020""10-20-2020" ……

數字值可以是實際數字,也可以是字符串形式的數字,因此值如5"5.3""10" ...

例如 ->


      const number = parseFloat(value);
      if (!isNaN(number)) {
          return NumberValueConverter.prototype.toView(number);
      }

      const date = dayjs(value);
      if (date.isValid()) {
          return DateValueConverter.prototype.toView(value);
      }

但此代碼不起作用 - 因為像 10-10-2020、10-10-2020 這樣的日期字符串最終會被解析為10

如果我反過來做,dayjs 會將 10 之類的數字轉換為有效日期。

當給定的字符串以數字開頭時, parseFloat已經很高興了,所以如果你在那個結果上測試isNaN ,你會得到誤報。

所以不要檢查結果是否為數字,而是檢查原始字符串是否代表數字:

if (!isNaN(number)) {

至:

if (!isNaN(value)) {

或者,您可以使用一元加號代替parseFloat ,它只會在輸入表示數字時返回一個確定的數字:

const number = +value;

...然后最好使用Number.isNaN進行測試:

if (!Number.isNaN(number)) {
if(/^[0-9]+[.]{0,1}[0-9]*$/.test(value)) {
     // Handle your number value
} else {
     // Check for date here
}

您可以使用上面的正則表達式來解析數字字符串。

  • /^: 指開始你的字符串
  • $/: 指你的字符串的結尾
  • [0-9]+:字符串的開頭是從 0 到 9,最小長度為 1
  • [.]{0,1}:可以包含 0 或最多 1 個 '.'
  • [0-9]*:字符串末尾可以包含 0 到 9 位數字。

您可以使用正則表達式來測試字符串是否看起來像映射前的日期。 這個正則表達式來自https://www.regextester.com/96683它測試它是否看起來像你傳入的日期。

如果您事先不知道格式,還有更復雜的正則表達式可以測試不同格式的日期: https://stackoverflow.com/a/15504877/14948219

 if(([12]\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\d|3[01])).test(value)){
    return date
 } else if(isNan(value){
    return number
    
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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