我有两种 javascript 模式:
/^[A-z0-9]{10}$/
- 长度正好为 10 个字母数字符号的字符串。
和
/^\d+$/
- 长度至少为 1 的任意数字。
10或任意数字的OR字符串的表达式怎么写?
var pattern =/^([A-z0-9]{10})|(\d+)$/;
由于某种原因不起作用。它至少通过了
pattern.test("123kjhkjhkj33f"); // true
A-z0-9
字符串不是数字,长度也不是 10。
最佳答案
请注意,您的 ^([A-z0-9]{10})|(\d+)$
模式匹配 A-z0-9
中的 10 个字符字符串开头的范围(^
仅修改 ([A-z0-9]{10})
部分(第一个替代分支),或 (|
) (\d+)$
结尾的 1 个或多个数字($
仅修改 (\d+ )
分支模式。
另请注意,A-z
是错字,[A-z]
does not only match ASCII letters .
您需要按如下方式修复它:
var pattern = /^(?:[A-Za-z0-9]{10}|\d+)$/;
或使用 i
修饰符:
var pattern = /^(?:[a-z0-9]{10}|\d+)$/i;
参见 regex demo .
请注意,分组在这里很重要:(?:...|...)
使 anchor 适本地应用于它们中的每一个。
详情
^
- 字符串的开始(?:
- 非捕获交替组:[A-Za-z0-9]{10}
- 10 个字母数字字符|
- 或者\d+
- 一位或多位数字
)
- 分组构造结束$
- 字符串结尾
关于javascript - “combine” 2 带逻辑或的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488991/