Javascript正则表达式建议
Javascript regular expression advice
本文关键字:正则表达式 Javascript 更新时间:2024-05-30
我有以下正则表达式:
/^[0-9]{8}([a-z]{1})?|[0-9]{3}-[0-9]{2}-[0-9]{3}([a-z]{1})?/
我正在尝试匹配以下模式12345678、12345678a(任意1个字符)、123-45-678、123-45678a(任意一个字符)
问题是,如果我输入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好吧,我完全错过了Everyone例子中的结尾$。我非常感谢你的帮助
修复正则表达式的一种方法是:
/^'d{3}(-?)'d{2}'1'd{3}[a-z]?$/
解释:^
=字符串的开头'd
=从0到9的任意1位,与[0-9]
相同{3}
=前一事物正好出现3次,在这种情况下为'd
-?
=可选-
(<part-of-regex-here>)
=捕获从1开始编号的匹配,在正则表达式中可以称为'1
[a-z]
=任何小写字母$
=字符串结束
RegexPal.com上的演示
响应更新1:
如果你尝试我的正则表达式:
var regExp = new RegExp(/^'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{8}|'d{3}-'d{2}-'d{3})[a-z]?$/
,注意字符串的开始(^)和结束($)的锚点。
我还使用了'd
而不是[0-9]
,因为它更短、更可读,并将[a-z]?
放在了交替之外。从没有必要使用{1}
。
以下是Regex101 的演示
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式