我正在为文本框准备正则表达式验证 人只能输入0-9,*,#每个用逗号分隔和非重复。 我准备了这个
if( ( incoming.GET_DTMF_RESPONSE.value.match(/[0-9*#]\d*$/)==null ) )
alert("DTMF WRONG"
其中,传入函数返回,GET_DTMF_RESPONSE是文本框名称
我在Regex中并不擅长..这是接受0-9和*和#这很好 但它也接受a-z 我希望它能制作非重复数字,没有字母,除了#,*
之外没有特殊字符让我知道如何做到这一点
答案 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)(?:,|$))+$