web-dev-qa-db-ja.com

PHP preg_match-英数字文字列と-_文字のみを許可

文字列に数字、文字、ハイフン、またはアンダースコアのみが含まれているかどうかを確認する正規表現が必要です

$string1 = "This is a string*";
$string2 = "this_is-a-string";

if(preg_match('******', $string1){
   echo "String 1 not acceptable acceptable";
   // String2 acceptable
}
25
Lee Price

コード:

if(preg_match('/[^a-z_\-0-9]/i', $string))
{
  echo "not valid string";
}

説明:

  • [] =>文字クラス定義
  • ^ =>クラスを否定する
  • a-z =>「a」から「z」までの文字
  • _ =>アンダースコア
  • -=>ハイフン '-'(エスケープする必要があります)
  • 0-9 =>数字(0から9)

正規表現の末尾にある 'i'修飾子は、A-Zを実行する前にコードに大文字を追加する必要があることを指定しない場合、 '大文字と小文字を区別しない'ためのものです。

85
SERPRO
if(!preg_match('/^[\w-]+$/', $string1)) {
   echo "String 1 not acceptable acceptable";
   // String2 acceptable
}
18
matino

以下は、UTF-8の世界で受け入れられている答えの1つです。

if (!preg_match('/^[\p{L}\p{N}_-]+$/u', $string)){
  //Disallowed Character In $string
}

説明:

  • [] =>文字クラス定義
  • p {L} =>あらゆる言語のあらゆる種類の文字に一致
  • p {N} =>あらゆる種類の数字と一致
  • _- =>アンダースコアとハイフンに一致
  • + =>量指定子— 1回から無制限に一致します(貪欲)
  • / u => Unicode修飾子。パターン文字列はUTF-16として扱われます。また、エスケープシーケンスがUnicode文字と一致するようにします

ハイフンがクラス定義の最後の文字である場合、エスケープする必要はありませんであることに注意してください。ハイフンではなく範囲文字として表示されるため、クラス定義の他の場所にダッシュが表示される場合は、エスケープする必要がありますです。

3
Epiphany

\w\-はおそらく最高ですが、ここでは別の選択肢にすぎません
つかいます [:alnum:]

if(!preg_match("/[^[:alnum:]\-_]/",$str)) echo "valid";

demo1 | demo2

2
Thielicious

str_Word_count() を使用したファンキーな非正規表現メソッドを次に示します。

if($string===str_Word_count($string,1,'-_0...9')[0]){
//                                     ^^^^^^^--- characters to allow, see documentation 
    echo "pass";
}else{
    echo "fail";
}

デモリンク を表示します。ここで、異なる入力が異なる出力配列をどのようにもたらすかを示します。

0
mickmackusa