我正在创建一个搜索框来搜索一个有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位数,而不是开头或结尾的“*”字符。任何帮助都将不胜感激。谢谢。
发布于 2016-06-23 18:46:08
您需要8位数字,或1-7位数字,在开始或结束时有一颗星,或1-6位数字,在开始和结束时有一颗星:
"\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*"您没有提到regex的风格,但是由于您使用了{8},我认为它可以处理范围。否则,您将需要类似于\d\d?\d?\d?\d?\d?的东西。
您可能需要锚点,这取决于所使用的语言和调用正则表达式的选项,在这种情况下,您将拥有
"^(\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*)$"在线测试器(使用多行和全局显示这里的所有匹配项):https://regex101.com/r/uQ1yY8/1
发布于 2016-06-23 18:53:10
一种可能的regexp:
\d{8}|\*?(\d{1})+\*可能它将需要一个"$“在最后(取决于您的RE引擎)。
UPDATE1:
说得好,我错过了那个。更好的版本:
^\*?(\d{1})+\*?$UPDATE2:
^\*?(\d{1,7})\*$|^\*(\d{1,7})\*?$|^\d{8}$https://stackoverflow.com/questions/37999439
复制相似问题