我试图创建一个正则表达式来匹配特定的给定数字模式。
模式是:
123456
1234XX
1234*
不允许:
以下组合:1234*X
或1234X*
或多个*
:1234**
我已经尝试过这个表达式:
/^[\\+\\#\\*0-9]{0,25}[X]*$/
但在这里,我将多个*
和1234*X
作为有效表达式。
有没有人知道适当的灵魂或解决方法?
修改 好的,我想我应该澄清规则。
正则表达式应匹配任何给定的数字:
012345
+12345
#1234525
但也匹配其中包含X
的字符串。
12345X
12345XX
1234XXXXXX
XXXXXX
X
应始终位于字符串的末尾。
只应在字符串末尾允许单个*
。
1234*
1234556*
1*
不允许多个*
。字符串末尾只有一个*
。
不允许X
和*
的组合。 1}}或1234X*
不被允许。
长度限制:0到25个字符。
答案 0 :(得分:1)
据我了解你的需要,这可以胜任:
^\d+(?:x+|\*)?$
根据问题编辑的新版本:
^[+#]?\d*(?:x+|\*)?$
答案 1 :(得分:0)
根据您的新更新:
^(?=.)[+#*]?\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
答案 2 :(得分:0)
您可以使用
'~^(?=.{0,25}$)[+#]?\d*(?:X*|\*?)$~D'
请参阅regex demo
这将确保整个字符串长度为0到25个字符,并且只允许字符串末尾有一个*
,零个或多个X
只能跟随0个或更多个数字。
<强>详情:
^
- 字符串开头(?=.{0,25}$)
- 检查整个字符串长度的正向前瞻(必须是0到25个字符长)[+#]?
- 一个或零+
或#
\d*
- 零个或多个数字(?:X*|\*?)
- 与两个替代方案中的任何一个匹配的非捕获组:
X*
- 零个或多个X
符号|
- 或...... \*?
- 一个或零*
个符号$
- 字符串结尾(最好将其替换为\z
,以确保不接受最后的换行符,或者只添加D
修饰符)。