Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于验证的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 用于验证的正则表达式

Javascript 用于验证的正则表达式,javascript,regex,Javascript,Regex,有人能告诉我如何为下面的场景编写正则表达式吗。输入只能是数字或-(连字符)或,(逗号)。输入可以按以下任意方式给出 23 23,26 1-23 1-23,24 24,25-56,58-40,45 此外,当数字在某个范围内给定时,第二个数字应大于第一个数字。23-1不应被允许。如果已经输入了数字,则不允许再次输入。像1-23,23不应该被允许我认为对于正则表达式,花时间学习它们比在不知道它到底在做什么的情况下把别人的脚本扔进你的脚本要好。你有很好的资源来帮助你 请尝试以下网站:

有人能告诉我如何为下面的场景编写正则表达式吗。输入只能是数字或
-
(连字符)或
(逗号)。输入可以按以下任意方式给出

23

23,26

1-23

1-23,24
24,25-56,58-40,45

此外,当数字在某个范围内给定时,第二个数字应大于第一个数字。23-1不应被允许。如果已经输入了数字,则不允许再次输入。像1-23,23不应该被允许

我认为对于正则表达式,花时间学习它们比在不知道它到底在做什么的情况下把别人的脚本扔进你的脚本要好。你有很好的资源来帮助你

请尝试以下网站:


这是谷歌搜索的前三个结果。这些都是很好的资源。祝你好运记住,通过将正则表达式输出到屏幕上,仔细检查您的正则表达式实际匹配的内容,不要以为您知道(这已经让我痛苦不止一次)。

我认为对于正则表达式,花时间学习它们比在不确切知道它在做什么的情况下将别人的脚本扔进您的脚本要好。你有很好的资源来帮助你

请尝试以下网站:


这是谷歌搜索的前三个结果。这些都是很好的资源。祝你好运记住,通过将正则表达式输出到屏幕上,仔细检查正则表达式的实际匹配情况,不要以为你知道(这已经让我痛苦不止一次了)。

我认为你无法用正则表达式实现这一点。特别是关于集合逻辑的部分-已经使用的编号,有效的顺序范围

我的建议是让一个正则表达式验证格式,至少-,数字,逗号。然后在逗号上使用
split
方法,并在输入上循环以验证设置。比如:

var number_ranges = numbers.split(',');
for (var i = 0; i < number_ranges.length; ++i) {
    // verify number ranges in set
}
var number_ranges=numbers.split(',');
对于(变量i=0;i

这个逻辑并不简单。

我认为你不能用正则表达式来实现这一点。特别是关于集合逻辑的部分-已经使用的编号,有效的顺序范围

我的建议是让一个正则表达式验证格式,至少-,数字,逗号。然后在逗号上使用
split
方法,并在输入上循环以验证设置。比如:

var number_ranges = numbers.split(',');
for (var i = 0; i < number_ranges.length; ++i) {
    // verify number ranges in set
}
var number_ranges=numbers.split(',');
对于(变量i=0;i

这个逻辑并不简单。

我不会用“我想”或“也许”来狡辩——你不能用正则表达式来做这件事

根据正则表达式进行匹配可以验证输入的形式是否正确,也可以用于提取输入片段,但它不能进行值比较、重复消除(定义良好的情况除外)或范围检查

我将您的输入解释为逗号分隔的值列表或值范围;在BNFish符号中:

value :: number
range :: value '-' value
term :: value | range
list :: term [','term]*
可以构建一个与此匹配的正则表达式来验证正确的结构,但是您必须对值比较进行其他验证,并防止重复的数字

我能想到的最严格的正则表达式(在短时间内)就是这个

您有数字或数字,可选后跟逗号[可选空格](数字或数字)-重复零次或多次


我用输入
3,4-12,6,2,90-221


当然,您可以将[0-9]替换为[\d]来表示允许使用的正则表达式方言。

我不会用“我想”或“也许”来狡辩——您不能用正则表达式来做这件事

var str = "24,25-56,24, 58- 40,a  45",
trimmed = str.replace(/\s+/g, '')

//test for correct characters
if (trimmed.match(/[^,\-\d]/)) alert("Please use only digits and hyphens, separated by commas.")

//test for duplicates
var split = trimmed.split(/-|,/)
split.sort()
for (var i = 0; i < split.length - 1; i++) {
    if (split[i + 1] == split[i]) alert("Please avoid duplicate numbers.")
}

//test for ascending range
split = trimmed.split(/,/)
for (var i in split) {
    if (split[i].match("-") && eval(split[i]) < 0) alert("Please use an ascending range.")
}
根据正则表达式进行匹配可以验证输入的形式是否正确,也可以用于提取输入片段,但它不能进行值比较、重复消除(定义良好的情况除外)或范围检查

我将您的输入解释为逗号分隔的值列表或值范围;在BNFish符号中:

value :: number
range :: value '-' value
term :: value | range
list :: term [','term]*
可以构建一个与此匹配的正则表达式来验证正确的结构,但是您必须对值比较进行其他验证,并防止重复的数字

我能想到的最严格的正则表达式(在短时间内)就是这个

您有数字或数字,可选后跟逗号[可选空格](数字或数字)-重复零次或多次


我用输入
3,4-12,6,2,90-221

当然,您可以将[0-9]替换为[\d],用于允许使用的正则表达式方言。

var str=“24,25-56,24,58-40,a 45”,
var str = "24,25-56,24, 58- 40,a  45",
trimmed = str.replace(/\s+/g, '')

//test for correct characters
if (trimmed.match(/[^,\-\d]/)) alert("Please use only digits and hyphens, separated by commas.")

//test for duplicates
var split = trimmed.split(/-|,/)
split.sort()
for (var i = 0; i < split.length - 1; i++) {
    if (split[i + 1] == split[i]) alert("Please avoid duplicate numbers.")
}

//test for ascending range
split = trimmed.split(/,/)
for (var i in split) {
    if (split[i].match("-") && eval(split[i]) < 0) alert("Please use an ascending range.")
}
修剪=str.replace(/\s+/g',) //测试字符是否正确 if(trimmed.match(/[^,\-\d]/)警报(“请仅使用数字和连字符,以逗号分隔。”) //重复测试 var split=trimmed.split(/-|,/) split.sort() 对于(变量i=0;i
var str=“24,25-56,24,58-40,a 45”,
修剪=str.replace(/\s+/g',)
//测试字符是否正确
if(trimmed.match(/[^,\-\d]/)警报(“请仅使用数字和连字符,以逗号分隔。”)
//重复测试
var split=trimmed.split(/-|,/)
split.sort()
对于(变量i=0;i
regex将很难进行值比较(不允许同一个数字再重复t