2016-05-28 7 views
0

だから私はこの割り当てを持っています。 大文字、小文字、アポストロフィ、スペース、または昏睡を含む名前入力を検証する必要があります。名前検証のためのPHP正規表現

$name = $_POST['your_name']; 
$regex_name = '/([A-Z]|[a-z])([A-Z][a-z\s])+/'; 
if (!preg_match($regex_name, $name)) { 
    echo '<span style="color:red">Please input a valid name!</span><br />'; 
} 

をしかし、正常に動作していないようですし、私はその理由を知らない: は、だから私は、検証のために、このを作ってみました。

私は正規表現とルールについて読んだことがありますが、私が間違っていることは得られません。私はここでもstackoverflow上のいくつかの例を見てきましたが、それはまだ私にとっては明らかではありません。

これは少なくとも文字を検証する必要があると思いますが、単純な入力でも「エラー」として誤っています。

助けてください!この正規表現は、次の操作を行います

+0

許容範囲/記号を含む1文字クラスを使用します。アンカーを使用し、量子を使用します。 –

+1

[php regex validation]の重複している可能性があります(http://stackoverflow.com/questions/3747362/php-regex-validation) – miken32

答えて

0

"正常に動作しません" 便利記述ではありません。しかし、あなたの問題は、文字列の始め(^)と文字列の最後($)でクエリを固定していない可能性が高いと思います。つまり、文字列内の任意の場所にある文字の部分集合と一致するだけです。

また、この質問では言いませんでしたが、コードでは最初の文字の文字のみを許可するように見えます。これはあなたのためにトリックを行う必要があります。

$name = $_POST['your_name']; 
$regex_name = "/^[a-z][a-z,' ]+$/i"; 
if (!preg_match($regex_name, $name)) { 
    echo '<span style="color:red">Please input a valid name!</span><br />'; 
} 

は、私はまた、検索では大文字と小文字を区別しないにするために、式の最後にi修飾子を使用しました。

+0

ありがとうございました!これはうまくいった。そして、私はまた、すべてのコメントから少しだけ正規表現のことを学び理解しました。皆さんにお返事いただきありがとうございます! –

1

説明

^[a-zA-Z'\s,]+$ 

Regular expression visualization

  • 与えられた文字列のみを持って検証:
    • 大文字
    • の小文字
    • スペース
    • カンマ文字クラス内
    • アポストロフィ

Iはa-zA-Z、及び実施例Iにおいては、大文字と小文字を区別しないフラグが有効になっているの両方を含んでいました。これは少し冗長です。

ライブデモ

https://regex101.com/r/rM2iU3/2

サンプルテキスト

aaaaaaa 
bbbb,bbbb 
cccc cccc 
ddd'ddddd 
fff3ffff 
gggggggg 

サンプル

にマッチします
aaaaaaa 
bbbb,bbbb 
cccc cccc 
ddd'ddddd 
gggggggg 

私はあなたが任意の空白文字は、スペースだけではなく指定したため、\ sのを使用しないことを選択した説明

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    [a-zA-Z'\s,]+   any character of: 'a' to 'z', 'A' to 'Z', 
          ''', whitespace (\n, \r, \t, \f, and " "), 
          ',' (1 or more times (matching the most 
          amount possible)) 
---------------------------------------------------------------------- 
    $      before an optional \n, and the end of a 
          "line" 
---------------------------------------------------------------------- 
0

[a-zA-z,' ]

これは、正規表現をオンザフライでデバッグする優れたツールです。

Rubular