无法弄清楚正则表达式这么简单

时间:2013-03-19 21:38:33

标签: php regex

我正在尝试验证通过PHP中的POST方法处理的表单。传递的一些示例值是姓名,年龄,性别,人格类型等。

为了确定给出的用户数据是否正确,我使用正则表达式。

例如,这里有一些我要工作的...... 姓名(只要它不是空白,就可以了:

if (strlen($name) == 0) 这个对我有用。另一个有效的是人格类型,它必须是荣格人格测试的类型(如ISTP,ENTP,INFP等)。我的代码是: if (!preg_match("/[IE]{1}[NS]{1}[FT]{1}[JP]{1}/", $per))其中$ per是用户提交的Jung个性类型。这个也很好。

我遇到困难的是年龄。它必须是0-99,所以1或2位数。我觉得它应该是如此简单的东西,但无论出于何种原因,它都无法正常工作。这是我试过的REGEX:

/\d{1,2}/

/[0-9]{1,2}/

/(\d|\d\d)/

/([0-9]|[0-9][0-9])/

我不明白为什么这些都不起作用,所有四个看起来都完全符合标准。也许我不理解如何正确使用正则表达式,但我花了最后几个小时阅读示例,所以我觉得它应该是正确的。

非常感谢任何帮助,谢谢:)

编辑:如果这有帮助,将值“abcdefg”或“ab”作为$ age值传递出来是一个错误(这是正确的)。但是,传递“100”,或“333”或“99999”的值,因为它匹配(这是错误的,或者它不是我想要的)。希望这有助于解释一下〜

1 个答案:

答案 0 :(得分:6)

如前所述,正则表达式不是正确的答案。但是,如果必须使用正则表达式,则需要启动^并结束$个锚点。正则表达式匹配字符串的一部分,因此/\d{1,2}/匹配abc123,因为它至少有一个带有可选第二个数字的数字。如果你想让它匹配2个字符,你需要将匹配锚定到字符串的开头和结尾,如/^\d{1,2}$/,说“字符串的开头,一个或两个数字,字符串的结尾。”