2012-04-22 30 views
5

関数ctype_alphaがあることがわかりますが、文字列にスペース(空白文字)が含まれている場合はFALSEが返されます。PHPで空白文字を含むアルファベット文字列のみを検証する方法は?

どのようにアルファ文字とスペースを使用できますか?

+0

確認する前に、スペースで置き換えますか? – DanRedux

+0

@DanReduxは、文字列に事前に数値が含まれていない場合にのみ機能します。 –

+0

なぜですか?あらかじめ数値が入っていれば、正しくfalseを返します。それに数字が入っていれば、正しくfalseを返します。スペースを悪いトークンに変換することで、スペースを悪いトークンとして扱うだけです。 – DanRedux

答えて

5
$is_alpha_space = ctype_alpha(str_replace(' ', '', $input))); 

または

$is_alpha_space = preg_match('/^[a-z\s]*$/i', $input); 
+0

ありがとうございます。私は最初のものが好きです。私はちょうど学習目的のために疑問に思っています、あなたはその最初のものについてどのように知っていますか?私はドキュメンテーションでさえ伝えることができないからです。 – Carpet

+0

それは1つの機能ではありません。 'str_replace()'を使って空白を取り除き、 'ctype_alpha()'を実行してその結果がアルファベット順であることを確認します。 – dtbarne

+0

私は理解していますが、ドキュメントのctypeページがそれを指摘していないとき(それを行うことができるか)、それをどうやって知っていますか?分かりません。 – Carpet

2
if (preg_match("^/[a-zA-Z ]+$/", $input)) { 
    // input matches 
} 

デモ:http://ideone.com/jp6Wi
ドキュメント:http://php.net/manual/en/function.preg-match.php

+0

'' [az] 'は[システムのロケール設定に応じて異なる文字にマッチする]ことに注意してください(http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in -preg-pcre)。 –

+0

正規表現にタイプミスがあります。それは '^ /'ではなく '/ ^'で始めるべきです。 – toxalot

+0

この正規表現ではスペースだけの文字列を使用できます。それが望ましい結果である場合とそうでない場合があります。 – toxalot

0

ctype_alpha(preg_replace('/\s/', '', $mystring))

内側の式は、スペースのない文字列を返し、その後、あなたが望むようにctype_alpha``使用

+0

これは**のカテゴリに該当します**ファンシーな置換ルールが必要ない場合は、 'preg_replace'の代わりに' str_replace'を使うべきです。** – toxalot

0

スペースを削除する方法はありますが、最近、ctype_alphaの結果が空の文字列の場合はfalseになります。方法の下で私は使用します...

function validateAlpha($valueToValidate, $spaceAllowed = false) { 
    if ($spaceAllowed) { 
     $valueToValidate = str_replace(' ', '', $valueToValidate); 
    } 
    if (strlen($valueToValidate) == 0) { 
     return true; 
    } 
    return ctype_alpha($valueToValidate); 
} 
関連する問題