我正在尝试创建一个正则表达式来匹配特定的给定数字模式。
模式如下:
123456
1234XX
1234*
不允许有:A组合如:1234*X
或1234X*
或多个*
: 1234**
我已经试过这个表达式了:
/^[''+''#''*0-9]{0,25}[X]*$/
但是这里我得到了多个*
和1234*X
作为有效表达式。
有没有人有合适的解决方案或解决方案的方法?
编辑:好的,我想我应该澄清一下规则。
正则表达式应该匹配任何给定的数字:
012345
+12345
#1234525
还可以匹配包含X
的字符串。
12345X
12345XX
1234XXXXXX
XXXXXX
X
s应该始终位于字符串的末尾。
单个*
应该只允许出现在字符串的末尾。
1234*
1234556*
1*
不允许多个*
。只有一个*
在字符串的末尾
不允许X
和*
的组合。不允许使用1234X*
或12345*X
。
长度限制:0 ~ 25个字符
就我所了解的您的需求而言,这样就可以了:
^'d+(?:x+|'*)?$
根据问题编辑新版本:
^[+#]?'d*(?:x+|'*)?$
可以使用
'~^(?=.{0,25}$)[+#]?'d*(?:X*|'*?)$~D'
参见regex demo
这将确保整个字符串长度为0到25个字符,并且只允许在字符串末尾出现一个*
,并且0个或多个X
只能跟随0或多个数字。
:
-
^
-字符串 起始 -
(?=.{0,25}$)
-一个正向前看检查整个字符串长度(必须从0到25个字符长) -
[+#]?
- 1或0+
或#
-
'd*
- 0或多个数字 -
(?:X*|'*?)
-一个非捕获组匹配2个备选方案中的一个:-
X*
-零或多个X
符号 -
|
- or… -
'*?
-一个或零*
符号
-
-
$
-字符串结束(最好将其替换为'z
,以确保末尾不接受换行符,或者只添加D
修饰符)
基于您的新更新:
^(?=.)[+#*]?'d*?(?:X+|'*)?$
现场演示
解释:
^ # Asserts beginnig of input string
(?=.) # Positive looakehad - input string length should be at least 1
[+#*]? # Optional symbols
'd*? # Optional digits (any number)
(?: # Start of non-capturing group (a)
X+ # Any number of X
| # Or
'* # A single *
)? # End of non-capturing group (a) - optional
$ # End of string