繁体   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