1

[0] 文字の後の文字 (最初の文字) が数字かどうかを確認するためにテストする必要がある文字列があります。

例:

Cは[0]

次に、残りの文字が数字のみであるかどうかを確認する必要があります。これは、C の後に次のようになることを意味します。

12345678

文字列を作る C12345678

これは私が試したことです:

 elseif(substr($str, 1, preg_match("/^[0-9]/", $str) === FALSE))
     {
       $this -> set_message('is_valid_student_id', 'Must have 8 digits 0 - 9');
       return FALSE;
     }

最初の文字は常に文字で、最後の 8 文字は常に数字です。

ありがとう

編集1:

言われた通りにやっても結果が出ない…

elseif (preg_match("/^\c\d{8}$/i", $str) === FALSE) // Lower case cC + 8 digits
     {
       $this -> set_message('is_valid_student_id', 'must have 8 digits 0 - 9');
       return FALSE;
     }

最初の文字 [c または C] の後に文字を入力しても FALSE が返されない

4

5 に答える 5

2

非正規表現ソリューションはどうですか?

デモ

$student_id = "C123b5678";

if(ctype_alpha($student_id[0])){
    if(ctype_digit(substr($student_id,1,strlen($student_id) - 1))){
       echo 'valid';
    }
    else{
       echo 'invalid';
    }

} else { echo 'invalid starting character'; }
// echoes invalid

編集: Cryode が指摘したように、is_numeric()このアプリケーションには広すぎます。文字列C1e5を有効なものとして渡すことができます... を使用するとctype_digit()、この問題が修正されます。必要に応じて、 にもチェックを入れてくださいstrlen()

于 2013-05-21T18:52:51.183 に答える
0

まず、substr()いくつかの点で間違った使い方をしています。3 番目のパラメーターは、2 番目のパラメーターで指定された位置から始まる、返される部分文字列の長さです。

substr()正の一致がない場合ではなく、関数が失敗した場合にも false を返します。そのような機能については、必要ですstrpos()

単独で使用preg_match()して、短い文字列の構造を確認できます。

仮定して:

  • 最初の文字は常に文字になります
  • 残りの文字は常に数字です。

これを使用できます:

preg_match('/^[a-zA-Z]\d+$/', $str)

最初の文字を大文字のみにする必要がある場合は、そのa-z部分を削除できます (小文字の場合はその逆)。

数字の桁数が特定の長さになる場合は、次を使用して指定できます{X}

preg_match('/^[a-zA-Z]\d{8}$/', $str) // Exactly 8 numbers
于 2013-05-21T18:50:03.820 に答える
0

これを行うだけです:

if (preg_match('~^C[0-9]{8}$~', $str))
    ...true...
else
    ...false...
于 2013-05-21T18:39:01.853 に答える
0

どうif (preg_match('/.\d+/'))ですか?この.部分には、「長さ 1 の任意のシンボル」と記載されています。これ\d+は数字のみで、1 つ以上のオカレンスです。

更新: 最初の位置の数字を許可しないようにするには、 を使用します preg_match('/[^\d]\d+/')

于 2013-05-21T18:39:10.460 に答える
0

これの最も単純な正規表現は次のようになります

/^C\d{8}$/

あなたが使用できるものは必要ありpreg_matchませsub_strん。または、最初から a だけでなく、任意の文字に一致させたい場合はC、次を使用できます

/^[a-z]\d{8}$/i

これは、文字列の先頭にある大文字と小文字の両方に一致します

于 2013-05-21T18:47:41.107 に答える