正则表达式仅包含数字和2个特殊字符,仅限空格

时间:2013-06-26 17:35:15

标签: javascript regex

我正在为文本框准备正则表达式验证 人只能输入0-9,*,#每个用逗号分隔和非重复。 我准备了这个

if( ( incoming.GET_DTMF_RESPONSE.value.match(/[0-9*#]\d*$/)==null ) )
alert("DTMF WRONG"

其中,传入函数返回,GET_DTMF_RESPONSE是文本框名称

我在Regex中并不擅长..这是接受0-9和*和#这很好 但它也接受a-z 我希望它能制作非重复数字,没有字母,除了#,*

之外没有特殊字符

让我知道如何做到这一点

2 个答案:

答案 0 :(得分:5)

这个正则表达式怎么样

^(?!.*,$|.*\d{2,})(?:([\d*#]),?(?!.*\1))+$

对于以逗号分隔的每个,我将其捕获到group1中,然后使用\1(后向引用)检查它是否在前面发生


^标志着字符串的开头

(?!.*,$|.*\d{2,})是一个前瞻,只有当字符串,结尾时才会匹配或者有两位或更多位数

(?:([\d*#]),?(?!.*\1))+中,在[\d*#]中捕获了一个group 1,然后我们使用(?!.*\1)检查字符串中是否有任何匹配项。 \1是指第1组中的值。使用+

为每个此类值重复此过程

$标记字符串

的结尾

例如

表示输入

 1,2,4,6,2

(?!.*,$|.*\d{2,})检查字符串是否以,结尾或是否有两位或更多位数

上述前瞻只检查模式但不匹配任何东西。所以我们仍然在字符串的开头

([\d*#])在第1组中捕获1

(?!.*\1)检查(不匹配)1任何地方。因为我们找不到,我们继续前进

由于+我们会再次做同样的事情

([\d*#])现在会捕获第1组中的2

(?!.*\1)检查(不匹配)2前面的任何地方。因为我们发现它,我们无法匹配文本


工作here


但是你最好使用非正则表达式解决方案,因为它会更简单和可维护。

var str="1,2,4,6,6";
str=str.replace(/,/g,"");//replace all , with empty string
var valid=true;
for(var i=0;i<str.length-1;i++)
{
    var temp=str.substr(i+1);
    if(temp.indexOf(str[i])!=-1)valid=false;
}
//valid is true or false depending on input

答案 1 :(得分:0)

您可以使用:

^(?:([0-9#*])(?!(?:,.)*,\1)(?:,|$))+$