1

我正在尝试验证通过 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 位数字。我觉得它应该如此简单,但无论出于何种原因,它都不起作用。这是我尝试过的正则表达式:

/\d{1,2}/

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

/(\d|\d\d)/

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

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

任何帮助将不胜感激,谢谢:)

编辑:如果这有帮助,将值“abcdefg”或“ab”作为 $age 值传递出来作为错误(这是正确的)。但是,传递“100”、“333”或“99999”的值会在匹配时出现(这是错误的,或者不是我想要的)。希望这有助于解释更多~

4

1 回答 1

6

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

于 2013-03-19T21:46:34.007 回答