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)当我在[0-9]{0-8}中添加{0-8}时,我想你提到的{0-8}与12345678不匹配。我在做测试,所以当我复制表达式时,它不会复制/^关于你的更新:只需在正则表达式的末尾添加$,它是^的补码,意思是“匹配字符串的结尾”,所以使用:/^\d{3}-?\d{2}-?\d{3}[a-z]?$/gbe警告说,如果您不使用Rahul或Sebastian的方法,您的正则表达式也与123-45678或12345-678匹配。@adviner您在更新中提到的正则表达式不正确。您缺少Anton提到的$
。请检查我下面的答案。改进建议:/^\d{3}(-)\d{2}\1\d{3}[a-z]?$/g
-不需要破折号或两个破折号,而不仅仅是一个。@NiettheDarkAbsol谢谢!这确实改善了正则表达式!我已经更新了我的答案。