1

PHP の POST メソッドで処理されているフォームを検証しようとしています。渡される値の例としては、名前、年齢、性別、性格タイプなどがあります。

与えられたユーザーデータが正しいかどうかを判断するために、正規表現を使用しています。

たとえば、ここに私が仕事をするようになったもののいくつかがあります..名前(空白でない限り、それは問題ありません:

if (strlen($name) == 0) これは私のために働いた。機能したもう 1 つのパーソナリティ タイプは、ユング パーソナリティ テストのタイプ (ISTP、ENTP、INFP など) である必要がありました。そのための私のコードは次のとおりです if (!preg_match("/[IE]{1}[NS]{1}[FT]{1}[JP]{1}/", $per))。 $per は、ユーザーが送信したユングの性格タイプです。これもうまくいきました。

私が苦労しているのは年齢です。0 ~ 99 である必要があるため、1 桁または 2 桁です。とても単純なものであるべきだと思いますが、何らかの理由で機能していません。私が試したREGEXは次のとおりです。

/\d{1,2}/

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

/(\d|\d\d)/

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

これらのどれも機能しない理由がわかりません.4つすべてが基準に完全に一致するようです. 正規表現を正しく使用する方法を理解していない可能性がありますが、ここ数時間は例を熟読していたので、正しいはずだと確信しています。

どんな助けでも大歓迎です、ありがとう:)

編集:これがまったく役立つ場合、値「abcdefg」または「ab」を $age 値として渡すと、エラーが発生します(これは正しいです)。しかし、「100」、「333」、または「99999」の値を渡すと、一致するようになります(これは間違っているか、私が望んでいるものではありません)。これがもう少し説明に役立つことを願っています〜

4

1 に答える 1

6

言われているように、正規表現はこれに対する正しい答えではありません。ただし、正規表現を使用する必要がある場合は、開始アンカー^と終了$アンカーが必要です。正規表現は文字列の一部と/\d{1,2}/一致abc123するため、オプションの 2 番目の数字を持つ数字が少なくとも 1 つあるため、一致します。2 文字だけに一致させたい場合は、/^\d{1,2}$/「文字列の先頭、1 桁または 2 桁、文字列の末尾」のように、文字列の先頭と末尾に一致を固定する必要があります。

于 2013-03-19T21:46:34.007 に答える