允许数字、加号、减号和括号的正则表达式

15

我正在尝试创建一个正则表达式,只允许以下字符0-9、加号、减号和括号()。对于每个所提到的字符,没有长度限制。到目前为止,我有以下这个,但似乎不起作用。

/^[0-9 -+]+$/

1
它实际上是有效的,我只是添加了括号。 - Michel Antoine
当你说“只允许”时,你实际上是指匹配字符串的一部分还是整个字符串?字符必须按照特定的顺序出现或者每个字符允许出现多少次?你实际上想通过这个正则表达式实现什么目的? - Xotic750
字符串的任何部分都应该允许有在开头、中间或结尾提到的内容。 - user2847098
5个回答

25

连字符 - 必须在 charlist 的结尾,否则它的意思是区间。

/^[0-9 ()+-]+$/

0-9可以简写为\d

/^[\d ()+-]+$/

13
这对您应该有效:

这对您应该有效:

^[\d\(\)\-+]+$

^ -> 字符串开头

\d -> 同 [0-9]

+ -> 至少一次重复

$ -> 字符串结尾

DEMO

var re = /^[\d\(\)\-+]+$/m; 
var str = ['09+()1213+-','fa(-ds'];
var m;
var result = "";
 
for(var i = 0; i < str.length; i++) {
    if ((m = re.exec(str[i])) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        // View your result using the m-variable.
        // eg m[0] etc.
 
    }
  result += "\""+str[i]+  "\"" + " is matched:" + (m != null) + "</br>";
}

document.getElementById("results").innerHTML = result
<div id="results"></div>


1

匹配数字、+、-、(、) 使用:

[+()\d-]+

技巧在于字符类内部的位置。
if (/^[+()\d-]+$/.test(text)) {

} else {

}

1

var re = /^[\w\(\)\-\!\+\*\&\%\$#\@\[\]\{\}\<\>\s]+$/m; 
var str = ['09+()1213+-[#test@gmail{}<>','fa(-ds'];
var m;
var result = "";
 
for(var i = 0; i < str.length; i++) {
    if ((m = re.exec(str[i])) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        // View your result using the m-variable.
        // eg m[0] etc.
 
    }
  result += "\""+str[i]+  "\"" + " is matched:" + (m != null) + "</br>";
}

document.getElementById("results").innerHTML = result
<div id="results"></div>


0
[\d\(\)\+\-\(\)]

应该可以了。

编辑:但是因为有些人认为转义太多了,所以在这里给你:

[\d+()-]


3
为什么逃亡如此严重?锚点和量化器在哪里? - Wiktor Stribiżew
因为它可以匹配每个字符。这将捕获所有内容。 - MortenMoulder
谁给这个点踩了...哈哈。这是一个可行的答案。肯定可以不用转义字符实现,但为什么要对一个可行的答案点踩呢?完全没有道理。 - MortenMoulder
我没有。在某些条件下,这可能是一个有效的答案。 - Wiktor Stribiżew
在某些情况下可以正常工作,这对于Javascript来说肯定没问题。 - MortenMoulder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接