我正在尝试验证通过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”的值,因为它匹配(这是错误的,或者它不是我想要的)。希望这有助于解释一下〜
答案 0 :(得分:6)
如前所述,正则表达式不是正确的答案。但是,如果必须使用正则表达式,则需要启动^
并结束$
个锚点。正则表达式匹配字符串的一部分,因此/\d{1,2}/
匹配abc123
,因为它至少有一个带有可选第二个数字的数字。如果你想让它匹配2个字符,你需要将匹配锚定到字符串的开头和结尾,如/^\d{1,2}$/
,说“字符串的开头,一个或两个数字,字符串的结尾。”