簡體   English   中英

如何使用正則表達式驗證此類輸入?

[英]How to validate such input using a regular expression?

有人可以通過使用正則表達式來幫助解決這個問題。 “useInput” function 必須將分鍾作為第一個參數,將秒作為第二個參數,如果輸入可以是:“1 2”(兩位數 - 分鍾秒),“1”(只是一個數字 - 分鍾) , "1 分鍾 2", "2 秒 1"。

沒那么必要,但如果不是太難的話: seconds = sec = second = s; 分鍾 = 分鍾 = 分鍾 = 米; Іn 而不是“1 分鍾”,您可以將“1 分鍾”寫入“輸入”

 const input = " 2 seconds 1 minutes " const regexTimer = new RegExp(/([0-9]+)\s*minutes?|([0-9]+)\s*seconds?/, 'g') useInput(input.replace(regexTimer, '$1$2')).split(' '));//1 parameter is minute, 2 parametr is second function useInput(minutes, seconds){...};

您可以使用捕獲組並將這些組值傳遞給 function。

檢查哪些組值不為空,並在此基礎上以正確的順序將參數傳遞給 function useInput。

對於秒和分鍾的部分名稱,您可以使用嵌套的可選組。

^\s*(?:(\d+)(?:\s*(\d+))?|(\d+)(?:\s+s(?:ec(?:onds?)?)?)?(?:\s+(\d+)(?:\s+m(?:in(?:utes?)?)?)?)?|(\d+)(?:\s+m(?:in(?:utes?)?)?)?(?:\s+(\d+)(?:\s+s(?:ec(?:onds?)?)?)?)?)\s*$

正則表達式演示

 const useInput = (minutes, seconds) => console.log(`minutes: ${minutes? minutes: "n/a"} - seconds: ${seconds? seconds: "n/a"}`); const regex = /^\s*(?:(\d+)(?:\s*(\d+))?|(\d+)(?:\s+s(?:ec(?:onds?)?)?)?(?:\s+(\d+)(?:\s+m(?:in(?:utes?)?)?)?)?|(\d+)(?:\s+m(?:in(?:utes?)?)?)?(?:\s+(\d+)(?:\s+s(?:ec(?:onds?)?)?)?)?)\s*$/; [ "1", "1 2", "1 minutes 2", "4 seconds 3", "5 seconds", "6 minutes", "7 min", "8 sec", "9 s 10 m", "11 m 12 second", "20 9 sec", "30 s 44", "test" ].forEach(s => { let m = s.match(regex); if (m) { if (m) { if (undefined,== m[1]) useInput(m[1], m[2]) if (undefined,== m[3]) useInput(m[4], m[3]) if (undefined !== m[5]) useInput(m[5], m[6]) } } })

暫無
暫無

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

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