Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式建议_Javascript_Regex - Fatal编程技术网

Javascript正则表达式建议

Javascript正则表达式建议,javascript,regex,Javascript,Regex,我有以下正则表达式: /^[0-9]{8}([a-z]{1})?|[0-9]{3}-[0-9]{2}-[0-9]{3}([a-z]{1})?/ 我正在尝试匹配以下模式1234567812345678A(任意1个字符)、123-45-678123-45-678a(任意1个字符)。 问题是,如果输入123456789,由于第一个条件[0-9]{8},它仍然有效。我搜索了一下是否可以使用某种AND运算符,但没有找到任何结果。是否有一个为什么要为每个条件添加正则表达式以匹配长度。示例[0-9]{8}也

我有以下正则表达式:

/^[0-9]{8}([a-z]{1})?|[0-9]{3}-[0-9]{2}-[0-9]{3}([a-z]{1})?/
我正在尝试匹配以下模式1234567812345678A(任意1个字符)、123-45-678123-45-678a(任意1个字符)。
问题是,如果输入123456789,由于第一个条件[0-9]{8},它仍然有效。我搜索了一下是否可以使用某种AND运算符,但没有找到任何结果。是否有一个为什么要为每个条件添加正则表达式以匹配长度。示例[0-9]{8}也必须匹配精确的长度?那么12345678是正确的,但123456789失败了

更新1

你们给了我很好的例子。这确实让我的表情变小了。我仍然面临的唯一问题是以下JavaScript代码:

var regExp = new RegExp(/^\d{3}-?\d{2}-?\d{3}[a-z]?/g);
var isValid = regExp.test('12345678');
isValid is true

var isValid = regExp.test('12345678d');
is valid 

the problem is if I enter
var isValid = regExp.test('12345678dd');
is also valid because of 12345678d

Since test() is used to find a match.  Is there a way to test the exact phrase of the regular expression so that 12345678dd fails?
更新2 好吧,我完全错过了everyones示例中的结尾$。非常感谢您的帮助

您可以使用
/^(?:\d{8}\d{3}-\d{2}-\d{3})[a-z]?$/
,注意字符串开头(^)和结尾($)的锚定

我还使用了
\d
而不是
[0-9]
,因为它更简短,更易读,并且将
[a-z]?
放在替换之外。永远不需要使用
{1}


下面是一个演示

修复正则表达式的一种方法是:

/^\d{3}(-?)\d{2}\1\d{3}[a-z]?$/
说明:
^
=字符串的开头
\d
=0到9之间的任意1位数字,与
[0-9]

{3}
=前面的事情正好出现了3次,在本例中是
\d

-?
=可选
-

()
=捕获一个从1开始编号的匹配,它可以在正则表达式中称为
\1

[a-z]
=任何小写字母
$
=字符串结尾

响应更新1:

如果您尝试我的正则表达式:

var regExp=newregexp(/^\d{3}-?\d{2}-?\d{3}[a-z]?$/);
var isValid=regExp.test('12345678');
console.log(isValid);
isValid=regExp.test('12345678d');
console.log(isValid);
isValid=regExp.test('12345678dd');

console.log(isValid)$
。请检查我下面的答案。改进建议:
/^\d{3}(-)\d{2}\1\d{3}[a-z]?$/g
-不需要破折号或两个破折号,而不仅仅是一个。@NiettheDarkAbsol谢谢!这确实改善了正则表达式!我已经更新了我的答案。