【发布时间】:2013-11-16 08:39:23
【问题描述】:
我正在尝试创建将验证简单模式的正则表达式。这里是有效和无效模式的列表。
有效:
foo, foo.bar, foo.bar.baz,
*, *.foo, foo.*, *.foo.*, *.foo.bar, foo.*.bar, foo.bar.*, *.foo.bar.*,
**, **.foo, foo.**, **.foo.**, **.foo.bar, foo.**.bar, foo.bar.**, **.foo.bar.**
而且无效:
<empty string>, null, false, true, foo bar baz,
.foo, foo., .foo.,
***, ***.foo, foo.***, ***.foo.*, foo.***.bar
所以允许的标记是* 和**。
我花了很多时间尝试为这些模式编写正则表达式,最好的解决方案是:
/(\.|^)(\w+|\*{1,2})(?=\.|$)/
但它不会检查整个模式,只是找到它的一部分,所以我无法使用preg_match 进行验证。另一个问题是.foo 模式根据该正则表达式是有效的,但它不应该因为开头的点。
我错过了什么?
【问题讨论】:
标签: php regex validation preg-match match