2011-10-13 18 views

答えて

77

コード:

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

説明:

  • [] =>文字クラス定義
  • ^=> >(あなたはそれをエスケープする必要があります)
  • 0-9 = - =>ハイフン ' - ' '' から 'Z'
  • _ =>
  • を強調するからクラスに
  • AZ =>文字を否定数字(ゼロから9まで)

あなたは、あなたがコードで大文字の文字を追加する必要がありますことを入れていない場合は正規表現の末尾に「I」修飾子は、「大文字と小文字を区別しない」のです前にAZを行うことによって

+0

これは "你好"のような中国語の文字もこれにもチェックすることができますか? – aahhaa

+2

@wlinあなたは '\ x {4e00} - \ x {9fa5}'をcharecterクラス定義に追加する必要があります。また、文字列とパターンをUTF-8として扱う 'u'修飾子を追加します。これは '/ [^ a-z _ \ -0-9 \ x {4e00} - \ x {9fa5}]/ui'のようになります。ここでテストすることができます:https://xrg.es/#1qvtb7n – SERPRO

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

canあなたは 'w 'が何であるか説明しますか?私はこれをよく理解していません –

+0

アルファベット文字に "_"すなわち[A-Za-z0-9_]を付け加えて – matino

+2

@matino:正規表現をアンカーする必要がありますが、これは 'a; b'と一致する場合を除きます。 – Toto

-1

なぜ正規表現を使用するのですか? PHPは、いくつかの

<?php 
    $valid_symbols = array('-', '_'); 
    $string1 = "This is a string*"; 
    $string2 = "this_is-a-string"; 

    if(preg_match('/\s/',$string1) || !ctype_alnum(str_replace($valid_symbols, '', $string1))) { 
     echo "String 1 not acceptable acceptable"; 
    } 
?> 

preg_match('/\s/',$username)

!ctype_alnum(str_replace($valid_symbols, '', $string1)) valid_symbols

1

\w\-は、おそらく最高のが、ここにあるかどうかを確認しますちょうど別の代替
使用[:alnum:]
空白スペースをチェックすることを行うための機能が組み込まれています

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

demo1 |ここでdemo2

0

str_word_count()を使用してファンキーな非正規表現の方法である:

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

私は別の入力が異なる出力配列につながる方法を示しDemo Linkを表示します。

0

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

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

説明:

  • [] =>文字クラス定義
  • P {L} =>は、任意の言語から文字の文字の任意の種類を一致
  • P {N} =>マッチ任意の種類の数字
  • _- =>はアンダースコアとハイフンに一致します
  • + =>数量 - 1〜無制限の時間に一致します(欲張り)
  • /u =>ユニコード修飾子。パターン文字列はUTF-16として扱われます。また 原因はハイフンがクラス定義の最後の文字であれば、それはをエスケープする必要がないこと、

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

関連する問題