我需要确保表单上的字段包含仅字母数字字符。零到九,A到Z.没有标点符号,没有特殊字符,没有别的。
我有以下方法:
function foo()
{
var pStrValue = mTrim($('#txtIDNumber').val());
var regexFirstChar = new RegExp("^[A-Z0-9]{1}"); //First character is alphanumeric
var regexNum = new RegExp("^[0-9]{9}.{0,3}$"); // First 9 are numeric
var regexLetter1 = new RegExp("^[A-Z]{1,3}[0-9]{6}$"); //Up to the first 3 are alpha, then there are exactly 6 numbers
var regexLetter2 = new RegExp("^[A-Z]{1,3}[0-9]{9}$"); //Up to the first 3 are alpha, then there are exactly 9 numbers
var firstCharIsNum = !isNaN(pStrValue.charAt(0));
if (!regexFirstChar.test(pStrValue)) //If the first character isn't alphanumeric
return false;
else if (firstCharIsNum)
{
//this is the conditional that evaluates to true incorrectly
if (!regexNum.test(pStrValue)) //If the first character is a number and is not proceeded by 8 more digits
return false;
}
else if (!firstCharIsNum)
{
if (!regexLetter1.test(pStrValue) && !regexLetter2.test(pStrValue)) //If the first 1-3 characters are letters and are not proceed by exactly 6 or 9 digits
return false;
}
return true;
}
问题是这是接受特殊字符。我将1234567890”,’”
输入文本框,然后通过验证。
我在一年前写过这篇文章,当时它肯定有用(或者我想也许QA错过了这个),但从那时起我们的应用程序已经进行了重要的重写。在任何一种情况下,正则表达式绝对不是我的强项。为什么这允许使用特殊字符?
答案 0 :(得分:1)
如果我正确理解了您的目标,问题出在您的行中:
var regexNum = new RegExp("^[0-9]{9}.{0,3}$");
.
允许任意字符在0到3次之间。至少,您需要将其转义为\.
- 但我认为您真正想要的是(小数点前九位数,后三位数):
var regexNum = new RegExp("^[0-9]{9}\.[0-9]{0,3}$");
答案 1 :(得分:1)
你的regexNum允许(在9个数字之后)最多3个字符,无论如何:
var regexNum = new RegExp("^[0-9]{9}.{0,3}$");
所以你可以简单地删除这个部分,它只允许9个数字
var regexNum = new RegExp("^[0-9]{9}$");
在这里你可以测试一下: http://regexr.com/3eaa5
编辑:在9个数字后面有3个可选的字母数字值(大写或小写),它将是:
var regexNum = new RegExp("^[0-9]{9}[A-Z0-9]{0,3}$");
答案 2 :(得分:1)
如果我打算你的问题regexNum
测试字符串是否由 9位 + 0-3个字母数字字符组成 [0-9A-Z] 。如果是这样的话:
var regexNum = new RegExp("^[0-9]{9}[0-9A-Z]{0,3}$"); // First 9 are numeric + 0-3 of any alphanumeric characters, end of string.
根据您的要求,这不允许使用标点,没有特殊字符,只需0-9和A-Z。
答案 3 :(得分:1)
您可以使用以下RegEx
var regularExp = new RegExp("^[0-9]{0,9}.{0,3}$");
阐释:
^ assert position at start of the string
[0-9]{0,9} match a single character between 0 to 9
$ assert position at end of the string