用于数字格式验证的正则表达式
Regex for Number format Validation
帮助正则表达式匹配这个数字模式。我只需要在下面接受输入 formats.For 实现这个验证逻辑我需要正则表达式。
我尝试使用以下
/(^(([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*
- 213433,123453,123*
- 123333,123623,678123,12323,
- 1123*,123445,166788,123333,.......
条件 - 数字的长度可以是 5 或 6。输入必须用逗号分隔。如果输入有 *(通配符搜索),则最大长度不能大于 5。ex 123123(不允许)*
这个好像不是很复杂,如果我看懂了问题。
var x = ['1123*,2133*,123*,1*', '213433,123453,123*', '123333,123623,678123,12323', '1123*,123445,166788,123333'];
var re = /\d{5,6}|\d{1,5}\*/g;
console.log(x.map(s => s.match(re)));
我不确定我是否完全理解 RegExp 匹配模式的要求,但这是一个初步的方法。
- 据我了解,[待匹配] 号码的长度可以为 5 或 6,并且匹配模式应该能够捕获符合此描述的任意数量的号码.对于这一部分,我将假设数字序列中不包含星号字符 (*)。
假设我们有一个变量 input
,它被赋值为字符串 213433,123453,123*
。那么...
input.match(/\d{5,6}(?!\*)/g);
应该按照描述捕获 input
变量的一部分。我注意到您在尝试中使用了字符集( 即 ,[0-9]
部分); \d
术语完成相同的 thing.The (?!\*)
部分用于检查 5 位或 6 位数字序列后面是否没有星号字符。注意:您必须转义星号。
- 如果输入确实包含星号字符,则匹配部分不能超过 5 个字符。 (我希望我能正确理解提示)!为此,以下 RegExp 模式适用于我 运行 的(不可否认的)两个测试。注意:此模式保留(即、matches/captures)星号字符以及数字序列。
我们可以假设此处的 input
变量被分配给字符串 1123*,2133*,123*,1*
以测试下一个 RegExp 匹配模式。
input.match(/(\d+\*){1,5}/g);
如果我没记错的话,可以使用简单的 OR (|
) 运算符有条件地组合这两个匹配模式。
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
希望对您有所帮助。作为最终测试,让我们将 input
变量分配给字符串 1123*,2133*,123*,1*,123333,123623,678123,12323
(我连接了您为此提供的示例输入 1. 和 3.)。然后,运行 returns 数组正上方的语句:
["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"]
帮助正则表达式匹配这个数字模式。我只需要在下面接受输入 formats.For 实现这个验证逻辑我需要正则表达式。 我尝试使用以下
/(^(([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*
- 213433,123453,123*
- 123333,123623,678123,12323,
- 1123*,123445,166788,123333,.......
条件 - 数字的长度可以是 5 或 6。输入必须用逗号分隔。如果输入有 *(通配符搜索),则最大长度不能大于 5。ex 123123(不允许)*
这个好像不是很复杂,如果我看懂了问题。
var x = ['1123*,2133*,123*,1*', '213433,123453,123*', '123333,123623,678123,12323', '1123*,123445,166788,123333'];
var re = /\d{5,6}|\d{1,5}\*/g;
console.log(x.map(s => s.match(re)));
我不确定我是否完全理解 RegExp 匹配模式的要求,但这是一个初步的方法。
- 据我了解,[待匹配] 号码的长度可以为 5 或 6,并且匹配模式应该能够捕获符合此描述的任意数量的号码.对于这一部分,我将假设数字序列中不包含星号字符 (*)。
假设我们有一个变量 input
,它被赋值为字符串 213433,123453,123*
。那么...
input.match(/\d{5,6}(?!\*)/g);
应该按照描述捕获 input
变量的一部分。我注意到您在尝试中使用了字符集( 即 ,[0-9]
部分); \d
术语完成相同的 thing.The (?!\*)
部分用于检查 5 位或 6 位数字序列后面是否没有星号字符。注意:您必须转义星号。
- 如果输入确实包含星号字符,则匹配部分不能超过 5 个字符。 (我希望我能正确理解提示)!为此,以下 RegExp 模式适用于我 运行 的(不可否认的)两个测试。注意:此模式保留(即、matches/captures)星号字符以及数字序列。
我们可以假设此处的 input
变量被分配给字符串 1123*,2133*,123*,1*
以测试下一个 RegExp 匹配模式。
input.match(/(\d+\*){1,5}/g);
如果我没记错的话,可以使用简单的 OR (|
) 运算符有条件地组合这两个匹配模式。
input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
希望对您有所帮助。作为最终测试,让我们将 input
变量分配给字符串 1123*,2133*,123*,1*,123333,123623,678123,12323
(我连接了您为此提供的示例输入 1. 和 3.)。然后,运行 returns 数组正上方的语句:
["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"]