Regex仅包含数字和2个仅带空格的特殊字符

Regex for including only numbers and 2 special characters with space only

本文关键字:空格 特殊字符 包含 数字 Regex 2个      更新时间:2023-09-26

我正在为文本框准备正则表达式验证其中person只能输入0-9、*、#,每个都用逗号分隔且不重复。我准备了这个

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

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

我在Regex不好。。它接受0-9和*以及#这很好但它也接受a-z我想让它成为非重复数字,没有字母表,没有特殊字符,除了#,*

让我知道如何进行

这个regex 怎么样

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

对于用逗号分隔的每个,我将其捕获到组1中,然后使用'1(backreference)检查是否提前发生


^标记字符串的开始

(?!.*,$|.*'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。自从我们找到它以来,我们已经无法匹配文本


在这里工作


但您最好使用非正则表达式解决方案,因为它会更简单、更易于维护。。

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

您可以使用这个:

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