10

preg_match('/[a-z]+[0-9]/', strtolower($_POST['value']))文字列に文字と数字の両方が含まれていることを確認するために使用します。5〜15文字を許可するように変更するにはどうすればよいですか?

/[a-z]+[0-9]{5,15}/動作しません。

更新 今私は試しました:

if(preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']))) {
    echo 'Valid!';
}

else {
    echo 'NOOOOO!!!';
}

入力フィールドに「dfgdfgdfg」と入力すると、「有効です!」と表示されます。値には文字と数字の両方が含まれ、5 ~ 15 文字である必要があります。

4

3 に答える 3

14

秘訣は、正の先読みを使用することです。この場合、2 つ必要です。

したがって(?=.*[0-9])、入力に少なくとも数字があるかどうかを確認します。次は何ですか?ご想像のとおり、追加するだけ(?=.*[a-z])です。それをanubhavaの答えとマージしましょう:

(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$

これは一般的にどういう意味ですか?

  • (?=.*[0-9]): 数字があるかチェック
  • (?=.*[a-z]):文字があるかどうかを確認します
  • ^: 文字列の先頭に一致
  • [a-z0-9]{5,15}: 数字と文字を 5 ~ 15 回一致させます
  • $: 文字列の末尾に一致

PHP の観点からは、変数が設定されているかどうかを常に確認する必要があります。

$input = isset($_POST['value']) ? strtolower($_POST['value']) : ''; // Check if $_POST['value'] is set, otherwise assign empty string to $input

if(preg_match('~(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$~', $input)){
    echo 'Valid!';
}else{
    echo 'NOOOOO!!!';
}

Online regex demo

于 2013-10-17T09:35:37.930 に答える
9

正規表現で正しい文字クラスで行頭アンカーと行末アンカーを使用します。

preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']));

あなたの正規表現:/[a-z]+[0-9]/は、実際には 1 つ以上の英字と 1 つの数字に一致します。

于 2013-10-17T09:16:27.607 に答える
1

これを試して :

<?php

 $str = your string here

 preg_match('/^[a-z0-9]{5,15}$/', $str);

?>
于 2013-10-17T09:18:32.897 に答える