文字、数字、および-_の正規表現


100

値が次の組み合わせのいずれかである場合、PHPでのチェックに問題があります

  • 文字(大文字または小文字)
  • 数字(0-9)
  • アンダースコア(_)
  • ダッシュ(-)
  • ポイント(。)
  • 場所がない!または他のキャラクター

いくつかの例:

  • OK: "screen123.css"
  • OK: "screen-new-file.css"
  • OK: "screen_new.js"
  • 不可:「screen new file.css」

与えられた文字列に上記以外の文字が含まれている場合、エラーをスローする必要があるため、これには正規表現が必要だと思います。


^ [\ w .-] * $->これにより、すべてのファイル名が取得されます。
Badri Gs 2017

回答:


207

あなたが望むパターンは次のようなものです(rubular.comでそれを見てください):

^[a-zA-Z0-9_.-]*$

説明:

  • ^ 行アンカーの始まりです
  • $ 行アンカーの終わりです
  • [...] 文字クラス定義です
  • * 「ゼロ以上」の繰り返し

文字ダッシュ-は文字クラス定義の最後の文字であることに注意してください。そうでない場合は、意味が異なります(つまり、範囲)。.また、別の意味の外の文字クラス定義を持っていますが、内部は、それだけでリテラルです.

参考文献


PHPで

このパターンの使用方法を示すスニペットを次に示します。

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>

上記の印刷物(ideone.comで見られるように):

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!

\w代わりにを使用して、パターンが少し異なることに注意してください。「単語文字」の文字クラスです。

APIリファレンス


仕様についてのご注意

これは仕様に準拠しているようですが.....、などと一致することに注意してください。照合するパターンをより具体的に指定できる場合、正規表現は少し複雑になります。

上記の正規表現は、空の文字列にも一致します。少なくとも1つの文字が必要な場合は、繰り返し+*(ゼロ以上)ではなく(1つ以上)を使用します。

いずれの場合も、仕様をさらに明確にすることができます(常に正規表現の質問をするときに役立ちます)が、うまくいけば、上記の情報を与えられて自分でパターンを記述する方法も学ぶことができます。


あなたがもっと望むかもしれない別の仕様についてはideone.com/5DMCaも参照してください。私と一緒に仕様を開発したい場合は、ルーブルで私と行ったり来たりしてください。
polygenelubricants

私はトルネードを使用しており、html名をキャプチャする必要があるため、あなたの回答に基づいてこれを使用しました。^/([a-zA-Z0-9._-]*\.html)$
NuclearPeon 2015

最後の文字は英数字である必要があります別のルールを追加します。正規表現の更新:/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
Consta Gorgan

Go(golang)ユーザー、ヘッドアップ、ここのパターンfalseは空の生の文字列リテラルになります。遊び場以下の @nonopolarityのソリューションを使用してください。
BentCoder

15

あなたは使うことができます

^[\w\d_.-]+$

+それは、少なくとも1文字を持っていることを確認することです。必要^$のような、文字列が途中で試合を持っているそうでない場合は、開始と終了を示すために@@@@xyz%%%%、それはまだ試合で、その後。


3
-範囲の定義を回避するために、最初のセットをセットに入れます。そして、\w英数字とアンダースコアをカバーしています。だからあなたは必要[\w.-]+です。
Richard

おかげで、これは私にとってはうまくいきます:^ [\ w \ d _.-] + \。(csv | CSV)$
Dharam Mali

これはGoの(golang)空の未加工文字列リテラルにも準拠していますが、受け入れられた回答はそうではないため、Goユーザーはこのソリューションを使用します。プレイグラウンド
BentCoder

8

実際のパターン、つまりルールに従って有効なファイル名をカバーするには、もう少し必要だと思います。これは、システムの観点からは正当なファイル名と一致しないことに注意してください。それはシステムに依存し、それが受け入れるものにおいてより自由になります。これは、許容可能なパターンに一致させることを目的としています。

^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

説明:

  • ^文字列の先頭に一致します。これ(および最後の一致)により、文字列は式に一致する部分文字列を含むだけでなく、正確な式に強制的に適合します。
  • ([a-zA-Z0-9]+[_-])*アンダースコアまたはダッシュが後に続く1つ以上の文字または数字の0回以上の出現。これにより、ダッシュまたはアンダースコアを含むすべての名前の間に文字または数字が入ります。
  • [a-zA-Z0-9]+1つ以上の文字または数字。これは、アンダースコアまたはダッシュを含まないすべての名前をカバーします。
  • \.文字通りのピリオド(ドット)。ファイル名に強制的に拡張子を付け、残りのパターンから除外することで、名前と拡張子の間にピリオドのみを使用できるようにします。ダッシュ/アンダースコアと同じテクニックを使用して、最後に処理できる複数の拡張子が必要な場合。
  • [a-zA-Z0-9]+1つ以上の文字または数字。拡張子は少なくとも1文字で、文字と数字のみを含む必要があります。これは一般的なことですが、アンダースコアを許可したい場合は、これにも対処できます。{2,3}1つ以上の代わりに長さの範囲を指定することもできます+より適切な場合マッチャーのます。
  • $文字列の末尾に一致します。開始文字を参照してください。

6

これはあなたが探しているパターンです

/^[\w-_.]*$/

これが意味すること:

  • ^ 文字列の始まり
  • [...] 内部の文字に一致
  • \w 任意の単語文字 0-9 a-z A-Z
  • -_.マッチ-_し、.
  • * ゼロ以上のパターンまたは無制限
  • $ 文字列の終わり

文字数を制限したい場合:

/^[\w-_.]{0,5}$/

{0,5}0-5文字を意味する


var a = / ^ \ w * $ / g a.test( "46545")で、結果はfalseでした
Dipak

1
次のものが\w含まれていることに注意してください_
hxpax

4

このようなものはうまくいくはずです

$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
    echo "not valid";
}

これは「無効」をエコーし​​ます


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.