什么是验证以下字符串的正确正则表达式:
id
以上将是字段中允许的输入值。
答案 0 :(得分:3)
使用正则表达式进行验证非常困难。
我们可以从类似于以下内容的表达式开始
[0-9]+\s+(days?|months?)
并为其添加更多边界。例如,我们可以添加开始和结束字符:
^[0-9]+\s+(days?|months?)$
或者我们可以缩小界限。例如,如果MOnths
和其他空格都可以,我们可以添加一个i
标志和\s+
:
如果我们希望传递一定数量的数字(例如1到2),则可以添加量词边界:
^[0-9]{1,2}\s(days?|months?)$
或者我们可以分别为日和月使用两个规则,并将它们与逻辑或连接:
^([0-9]{1,3}\sdays?|[0-9]{1,2}\smonths?)$
根据Allan的建议,如果需要,我们还可以在表达式中包含单数和复数约束,并扩展验证:
^[01]\s+(?:day|month)$|^[2-9]\s+(?:days|months)$|^[1-9]+[0-9]+\s+(?:days|months)$
jex.im可视化正则表达式:
const regex = /^([0-9]{1,3}\sdays?|[0-9]{1,2}\smonths?)$/gmi;
const str = `100 day
300 days
11 month
22 months
20 months
12 months
1211111 MonTHs`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 1 :(得分:2)
这里是一种仅将天数/月数和附带的关键字作为单独的组进行获取的方法:
([0-9]+) ((days|day|months|month))
通过这种方式,您可以通过引用正确的组来访问数字或关键字。