我使用javascript RegEx验证用户输入,该用户输入获取包含3 - 4 - 5
,3 / 4 / 5
或3 , 4 , 5
等数字列表的字符串。
到目前为止我的正则表达式是
function(string){
var reg = /([0-9])([^\s]|[\s])([\-\,\/])/g;
if(string.match(reg){
return true;
}
return false;
}
到目前为止,我可以获得3 - 4 -
但不能获得5
,如果我省略空格,则它与任何内容都不匹配。
我想要一个正则表达式,可以将所有 n 数字除以这些字符(\ - ,
),而不是匹配字母或其他特殊字符。
有什么建议吗?
答案 0 :(得分:2)
您需要通过$
:
^(?:(\d)\s[-,\/]\s)+\d$
<强> Live demo 强>
<强>说明强>:
^ # Start of the line
(?: # Start a non-capturing group
(\d) # Capture any digits
\s[-,\/]\s # Followed by a space, [-,/] chars and another space
)+ # One or more of the previous expression
\d # Any digit
$ # End of line
Javascript部分:
function test(string) {
var reg = /^(?:(\d)\s[-,\/]\s)+\d$/gm;
if(string.match(reg))
return true;
return false;
}
样品:
test('3 , 4 , 5') --> True
test('3 , 4 , 5 ,') --> False
test('3 - 4 - 5 ') --> False
test('3 - 4 - 5') --> True
注意:我根据您当前的输入和正则表达式修改了正则表达式。因此,如果您要检查序列中的多个数字,则需要将\d
替换为正则表达式中的每个位置\d+
。 +
表示一次或多次。所以它会是:
^(?:(\d+)\s[-,\/]\s)+\d+$
和样品:
test('39 - 46 - 5') --> True
test('69 / 85 / 23 /') --> False
答案 1 :(得分:1)
使用
function check(string){
return /^\s*\d+(\s*[\/,-]\s*\d+)*\s*$/.test(string);
}
注释
我删除了g标志,这是无用的,我使用test
而不是match
,因为你想要的是测试字符串,而不是提取一场比赛。
我添加了^
和$
以确保您检查整个字符串
\s*
允许可选空格
允许数字为多位数(在您的问题中不明确),我将\d
更改为\d+
答案 2 :(得分:0)
/([0-9])([\s])([-,/])([\s])([0-9])([\s])([-,/])([\s])([0-9])([-,/])?/g
虽然,这是一个更简单的版本。它是由您的代码制作的。
/\d\s[-,/]\s\d\s[-,/]\s\d[-,/]?/g
\d
匹配数字?
表示前面的语句是可选的。这应该更容易理解。使用我链接的网站以便将来使用RegExp。它是救星。
在行动here
中查看答案 3 :(得分:-2)
您可以修剪空格并应用以下正则表达式。
function(string){
var reg = /([0-9]+)[-|,|\/]?/g;
if(reg.match(string)){
return true;
}
return false;
}
([0-9] +)将匹配由-
,,
或/
分割的一个或多个数字。