匹配8位数字或1-8位数字和星号

时间:2016-06-23 18:43:17

标签: regex

我正在创建一个搜索框,以搜索包含8位数字或通配符搜索的数字。它应该只允许在结尾或开头有一个可选的星号:

Valid results
12345678
87654321
1112223*
12*
1345*
*123456*
*1234567
*1*    

Invalid results
1234567
A
12-
12@
**
**1234**
&T(
*
*1*2*
89789A8

尝试创建正则表达式来解决此问题。我目前有这个:

"\d{8}"

但它只允许8位数而不是开头或结尾处的'*'字符。任何帮助,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:3)

您需要8个数字,或者在开头或结尾带有星号的1-7位数字,或者在开头和结尾带有星号的1-6位数字:

"\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*"

你没有提到你的正则表达式风格,但是因为你使用{8}我认为它可以处理范围。否则,您需要\d\d?\d?\d?\d?\d?

之类的内容

您可能需要锚点,具体取决于所使用的语言和用于调用正则表达式的选项,在这种情况下,您将拥有

"^(\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*)$"

在线测试人员(使用多行和全局显示所有匹配):https://regex101.com/r/uQ1yY8/1

答案 1 :(得分:1)

一个可能的正则表达式:

\d{8}|\*?(\d{1})+\*

可能最后需要一个“$”(取决于您的RE引擎)。

UPDATE1:

好点,我错过了那个。更好的版本:

^\*?(\d{1})+\*?$

UPDATE2:

^\*?(\d{1,7})\*$|^\*(\d{1,7})\*?$|^\d{8}$