制作一个正则表达式来验证只有一个数字的字符串

时间:2015-04-09 12:34:00

标签: javascript regex

这里是我的问题,在某些项目中,我需要验证一个字符串,它必须是4个字符的长度,并且包含一个且只有一个数字,但我不知道它的位置(可以是& #34; er1t"或" 4frt"但不是" sdfd"或" 4fd5")

我制作的正则表达式有效:(?:[a-z]\d[a-z]{2}|\d[a-z]{3}|[a-z]{2}\d[a-z]|[a-z]{3}\d)但它没有优化,我也找不到如何在正则表达式中搜索字符串中的数字,我使用的是javascript正则表达式。

提前感谢,

ekanS

1 个答案:

答案 0 :(得分:3)

看起来你可以使用

^(?=[a-z]*\d[a-z]*$)[a-z\d]{4}$

Demo

简而言之,我们可以设置(?=\D*\d\D*$)条件来检查整行/字符串在行/字符串的最开头是否只有1个数字。然后我们可以允许任何小写字母和数字。

如果您打算允许使用大写字母,请将A-Z添加到字符类,或使用i选项。

function isValid(code) {
   var re = /^(?=[a-z]*\d[a-z]*$)[a-z\d]{4}$/gm; 
   if ((m = re.exec(code)) !== null) {
    document.getElementById("res").innerHTML =  document.getElementById("res").innerHTML + "<br>" + m[0] + " is <font color=\"#0000FF\">valid</font>.";
   }
   else { 
        document.getElementById("res").innerHTML =  document.getElementById("res").innerHTML + "<br>" + code + " is <font color=\"#FF0000\">not valid</font>.";
    }
}

isValid('er1t');
isValid('4frt'); 
isValid('sdfd');
isValid('4fd5');
isValid('ffd5');

document.getElementById("res").innerHTML + "</font>"
<div id="res"><font face="Arial"><b>Valid codes:</b><font face="Tahoma"><div>