如何检查字符串是否与正则表达式完全匹配?

时间:2011-04-08 14:12:03

标签: php regex

我正在为客户的产品销售网站制作注册脚本。

我目前正在处理参考ID输入区域,我想确保参考ID在付款方式的正确参数范围内

参考ID将如下所示:XXXXX-XXXXX-XXXXX

我正在尝试使用此RegEx模式来匹配它:/(\w+){5}-(\w+){5}-(\w+){5}/

这完全匹配,但它也匹配XXXXX-XXXXX-XXXXXXXXXX

或者至少它在那里找到匹配。我希望它确保整个字符串匹配。我对RegEx不太熟悉

我该怎么做?

9 个答案:

答案 0 :(得分:9)

您需要使用开始和结束锚点。或者,如果您不需要捕获这些组,则可以省略括号。

此外,+{5}表示不止一次匹配5次。我相信你不想这样,所以我放弃了+

/^\w{5}-\w{5}-\w{5}\z/

另外,我使用了\z,因此您的字符串与"abcde-12345-edcba\n"不匹配。

答案 1 :(得分:9)

使用^ and $分别匹配输入字符串的开头和结尾。

另请注意,您使用+是多余的,因为(\w+){5}表示“一个字符,至少一次,五次”,这意味着它至少可以匹配 五次。如果你不需要反向引用,你可能意味着(\w){5}(或只是\w{5};我会在我的例子中假设你这样做。)

/^(\w){5}-(\w){5}-(\w){5}$/

答案 2 :(得分:2)

将正则表达式放在^$之间以匹配整个字符串并检查它是否与任何内容匹配

示例:

/^(\w+){5}-(\w+){5}-(\w+){5}$/

答案 3 :(得分:1)

尝试

/^([\w]{5,5})-([\w]{5,5})-([\w]{5,5})$/i

有几个在线正则表达式测试人员,我在编码之前使用this one

答案 4 :(得分:0)

使用^和$标记正则表达式字符串的开头和结尾:

/^\w{5}-\w{5}-\w{5}$/

http://www.regular-expressions.info/anchors.html

答案 5 :(得分:0)

将其括在“^”和“$”中:

/^(\w+){5}-(\w+){5}-(\w+){5}$/

答案 6 :(得分:0)

/^(\w){5}-(\w){5}-(\w){5}$/
你需要明确地说你希望模式从字符串的开头开始并在结束时结束 你可以改进它:/^((\w){5}-){2}(\w){5}$/;这样,您就可以轻松修改序列号可能包含的元素数量。

答案 7 :(得分:0)

您需要^匹配字符串的开头,$匹配结尾:

/^\w{5}-\w{5}-\w{5}$/

请注意(\w+){5}不正确,因为这意味着重复\w+五次,但这又意味着“一个或更多字符”。

答案 8 :(得分:-1)

在preg中,\ b标记单词边界。所以你可以试试像

这样的东西
/\b(\w+){5}-(\w+){5}-(\w+){5}\b/