正则表达式匹配任意代码集

时间:2009-06-03 20:22:51

标签: regex

我正在寻找一些帮助来创建一个可以在我们的系统中使用唯一输入的正则表达式。我们的按键事件中已经有一些逻辑只允许数字,并允许字母A和字母M.现在我需要提出一个可以在onblur事件期间匹配输入的RegEx以确保格式是正确的。

我在下面有一些有效的例子。字母A表示年龄,因此始终跟随最多3位数字。字母M只能出现在字符串的末尾。

有效输入

1-M
10-M
100-M
5-7
5-20
5-100
10-20
10-100
A5-7
A10-7
A100-7
A10-20
A5-A7
A10-A20
A10-A100
A100-A102

输入无效

A-A
A45
4

6 个答案:

答案 0 :(得分:2)

/^[A]?[0-9]{1,3}-[A]?[0-9]{1,3}[M]?$/

匹配表格中的任何内容:

A(optional)[1-3 numbers]-A(optional)[1-3 numbers]M(optional)

答案 1 :(得分:2)

这匹配所有样本。

/A?\d{1,3}-A?\d{0,3}M?/

不确定10-A10M是否应该合法,或者即使M可以出现数字。如果M只有没有数字:

/A?\d{1,3}-(A?\d{1,3}|M)/

答案 2 :(得分:2)

如果您有少量明确定义的模式,请使用强力方法,这样您就不会遇到错误的角落匹配:

^(\d+-M|\d+-\d+|A\d+-\d+|A\d+-A\d+)$

以下是分发的单个正则表达式:

\d+-M      <- matches anything like '1-M'
\d+-\d+    <- 5-7
A\d+-\d+   <- A5-7
A\d+-A\d+  <- A10-A20

答案 3 :(得分:1)

^A?\d+-(?:A?\d+|M)$

一个可选的A后跟一个或多个数字,一个短划线,以及另一个可选的A和一些数字或M.“(?: ... )'表示法是一组Perl'非捕获'的括号备择方案;这意味着正则表达式匹配后将没有“$1”。显然,如果你想捕捉各种各样的零碎,你可以 - 而且 - 会这样做,而且非捕获条款可能不再相关。

(您可以将“+”替换为“{1,3}”,如JasonV所做,将数字限制为3位数。)

答案 4 :(得分:1)

^A?\d{1,3}-(M|A?\d{1,3})$

^ - 必须从头开始进行比赛 一个? - “A”是可选的 \ d {1,3} - 介于1到3位之间; [0-9] {1,3}也有效 - - “ - ”字符
(... | ...) - 两个表达式中的任何一个 (M | ...) - “M”或......
(... | A?\ d {1,3}) - “A”后跟至少一个,最多三个数字
$ - 匹配应该到最后

更改格式的一些后果。如果您没有在开头添加“^”,则匹配可能会忽略无效的开头。例如,“MAAMA0-M”将匹配“A0-M”。

如果同样地将$ $留出,则匹配可能会忽略无效的跟踪。例如,“A0-MMMMAAMAM”将匹配“A0-M”。

通常首选使用\ d,对于字母数字,\ w表示空格,\ s表示空格,\ D表示非数字,\ W表示非字母数字,\ S表示非空格。但是你必须小心,\ d不被视为转义序列。您可能需要将其写为\\ d而不是。

{x,y}表示最后一次匹配必须在x和y次之间进行。

?表示最后一场比赛必须发生一次或根本不发生。

使用()时,将其视为一个匹配项。 (ABC)?将匹配ABC或根本没有。

答案 5 :(得分:0)

我会使用这个正则表达式:

^(?:[1-9]\d{0,2}-(?:M|[1-9]\d{0,2})|A[1-9]\d{0,2}-A?[1-9]\d{0,2})$

这匹配:

  • <number> -M <number> - <number>
  • A <number> - < em> <number> A <number> -A <number>

此外 <number> 不得以0开头。