Javascript 用于数字格式验证的正则表达式
帮助正则表达式匹配此数字模式。。我只需要接受以下格式的输入。为了实现这个验证逻辑,我需要正则表达式。 我试着用下面的方法Javascript 用于数字格式验证的正则表达式,javascript,regex,regex-lookarounds,Javascript,Regex,Regex Lookarounds,帮助正则表达式匹配此数字模式。。我只需要接受以下格式的输入。为了实现这个验证逻辑,我需要正则表达式。 我试着用下面的方法 /(^(([0-9]{5,6}[,])+[0-9]{5,6})$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5}\*)$)|(^(([0-9]{5,6}[,])+[0-9]{1,5}\*)$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5})$)/ 但它并不是所有的场景都匹配 以下是可能的输入 1123*,2133*,123*,1* 213
/(^(([0-9]{5,6}[,])+[0-9]{5,6})$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5}\*)$)|(^(([0-9]{5,6}[,])+[0-9]{1,5}\*)$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5})$)/
但它并不是所有的场景都匹配
以下是可能的输入
条件-编号的长度可以为5或6。输入必须用逗号分隔。如果输入具有*(通配符搜索),则最大长度不能大于5。ex123123(不允许)*如果我理解问题的话,这看起来并不复杂
var x=['1123*、2133*、123*、1*、'213433123453123*、'12333312362367812323'、'1123*、12344516788123333';
var re=/\d{5,6}|\d{1,5}\*/g;
log(x.map(s=>s.match(re))代码>如果我理解这个问题,这看起来并不复杂
var x=['1123*、2133*、123*、1*、'213433123453123*、'12333312362367812323'、'1123*、12344516788123333';
var re=/\d{5,6}|\d{1,5}\*/g;
log(x.map(s=>s.match(re))代码>我不确定我是否完全理解RegExp匹配模式的要求,但这里有一个初步的方法
- 据我所知,数字[待匹配]的长度可以是5或6,并且匹配模式应该能够捕获符合此描述的任意数量的数字。对于这一部分,我将假定数字序列中不包含星号字符(*)
假设我们有一个变量input
,它被指定为字符串213433123453123*
的值。然后
input.match(/\d{5,6}(?!\*)/g);
应捕获所述的输入
变量的部分。我注意到您在尝试中使用了字符集(即[0-9]
部分);\d
术语完成了相同的任务。(?!\*)
部分用于检查5位或6位序列后面是否有星号字符。注意:您必须避开星号
- 如果输入具有星号字符,则匹配部分不能超过5个字符。(我希望我正确理解了提示)!对于这一点,下面的RegExp模式适用于我运行的两个测试(诚然是用之不竭的)。注意:此模式保留(即匹配/捕获)星号字符和数字序列
为了测试下一个RegExp匹配模式,我们可以假设这里的input
变量被分配给字符串1123*、2133*、123*、1*
input.match(/(\d+\*){1,5}/g);
如果我没有弄错的话,可以使用简单的OR(|
)运算符有条件地组合这两种匹配模式
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
希望这能有所帮助。作为最后一个测试,让我们将input
变量分配给字符串1123*、2133*、123*、1*、12333312362367812312323
(我连接了您为此提供的示例输入1.和3.)。然后,直接运行上面的语句返回数组:
["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"]
如果要检索不带任何通配符的匹配项(*),只需修改表达式即可,如下所示:
a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', ''));
得到
["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"]
我不确定我是否完全理解RegExp匹配模式的要求,但这里有一个初步的方法
- 据我所知,数字[待匹配]的长度可以是5或6,并且匹配模式应该能够捕获符合此描述的任意数量的数字。对于这一部分,我将假定数字序列中不包含星号字符(*)
假设我们有一个变量input
,它被指定为字符串213433123453123*
的值。然后
input.match(/\d{5,6}(?!\*)/g);
应捕获所述的输入
变量的部分。我注意到您在尝试中使用了字符集(即[0-9]
部分);\d
术语完成了相同的任务。(?!\*)
部分用于检查5位或6位序列后面是否有星号字符。注意:您必须避开星号
- 如果输入具有星号字符,则匹配部分不能超过5个字符。(我希望我正确理解了提示)!对于这一点,下面的RegExp模式适用于我运行的两个测试(诚然是用之不竭的)。注意:此模式保留(即匹配/捕获)星号字符和数字序列
为了测试下一个RegExp匹配模式,我们可以假设这里的input
变量被分配给字符串1123*、2133*、123*、1*
input.match(/(\d+\*){1,5}/g);
如果我没有弄错的话,可以使用简单的OR(|
)运算符有条件地组合这两种匹配模式
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
希望这能有所帮助。作为最后一个测试,让我们将input
变量分配给字符串1123*、2133*、123*、1*、12333312362367812312323
(我连接了您为此提供的示例输入1.和3.)。然后,直接运行上面的语句返回数组:
["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"]
如果要检索不带任何通配符的匹配项(*),只需修改表达式即可,如下所示:
a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', ''));
得到
["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"]
你能解释一下模式吗?这不是你一小时前问的同一个问题吗?减去要求-我添加了它们。请提供一个简单、清晰的描述,说明您希望匹配的输入,包括是否接受逗号以及如何接受逗号。我们不知道你所说的“可以扩展到任何次数”是什么意思。当你刚刚说“数字可以有长度5或6”时,为什么你会说“它不匹配所有场景”,并给出一个例子1*
?@torazaburo我已经更新了问题。你能解释一下模式吗?这不是吗