我需要创建正则表达式来验证包含通配符的字符串。表达式必须采用移动电话号码(xxx-xxx-xxxx
)的形式,其中x
是数字号码或问号。在这种情况下,regexp足够直^([\d?{3}]-[\d?{3}]-[\d?{4}])$
但是当用户请求*
外卡时,我真的很困惑。
首先它可以是xxx-xxx-*
,对吧?但xxx-xxx-**
和xxx-*-*
一样无效。我读了一些关于前瞻模式的东西(用C#编写)但是只是混淆了更多。我试图编译像^(?![\\*\\*])$
这样的东西 - “不是彼此靠近的两个星号”,但它不起作用。
那么,还有更多想法吗?
答案 0 :(得分:1)
我不确定我是否完全理解了你的要求,但听起来我觉得你想要一个匹配的模式:
任选
?
后跟-
?
后跟-
?
后跟-
这应匹配
123-456
12?-4??-78??
1-3?-2?0
但不匹配
1--123
-?-23
1233-23?-234
在这种情况下,您不需要前瞻
此模式应该有效
^([\?\d]{1,3})(\-[\?\d]{1,3}(\-[\?\d]{1,4})?)?$
答案 1 :(得分:0)
这会使你的表达有一些修正
^[\d?]{3}-[\d?]{3}-[\d?]{4}$
我移动了结束方括号,量词必须在字符类之外,我也删除了最外面的括号,因为它们没有意义。
现在向前瞻。
如果你想禁止“**”
^(?!.*\*\*)[\d?]{3}-[\d?]{3}-[\d?]{4}$
我不确定您对“*”的使用要求。字符串中只允许一个吗?
类似于禁止“ - ”
^(?!.*\*\*)(?!.*--)[\d?]{3}-[\d?]{3}-[\d?]{4}$