2017-06-22 2 views
1

文字と数字は一致させたいが、数字だけではない。文字と数字または文字列のみを検証する方法は?

は、だから私はこのようにフィルタリングするpreg_match()パターンを作成したい:

例:

  1. no123
  2. 123no
  3. 123456
  4. letters
+0

に一致するケースレスは文字だけ有効かいませんか? – Toto

+0

文字のみが有効ですが、数字は無効です。 –

答えて

0

これは試すことができますRegex。数字と文字の両方を少なくとも1つチェックします。あなたのコメントによると

(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$ 
0

: "唯一vaild文字だけ番号無効"、この仕事をするウィル:

if (preg_match('/^(?=.*[a-z])[a-z0-9]+$/i', $inputString)) { 
    // valid 
} else { 
    // invalid 
} 

説明:

/    : regex delimiter 
^   : start of string 
    (?=.*[a-z]) : lookahead, make sure we have at least one letter 
    [a-z0-9]+ : string contains only letters and numbers 
    $    : end of string 
/i    : regex delimiter + flag case insensitive 
1

SKIPを使用します-FAILパターンはTotoのパターンを上回ります(MH2K9の答えはすべてのアルファベットの一致が許されないので間違っています)。デモリンクのサンプルテキストでパターンをテストできます。

/^\d+$(*SKIP)(*FAIL)|^[a-z\d]+$/i

Pattern Demo Link

これは純粋に数値文字列、およびマッチ混合(数値アルファベット)と純粋にアルファベットの文字列を "不適格"。

コード:(Demo

$string='test123'; 
var_export(preg_match('/^\d+$(*SKIP)(*FAIL)|^[a-z\d]+$/i',$string)?true:false); 

出力:

true 
1

だから我々は、少なくとも1つの文字を持っている必要があります。その前に任意の桁数があり、文字列の終わりまで任意の英数字が許可されます。

/^\d*[a-z][a-z\d]*$/i 
  • ^ストリング
  • \d*開始一文字
  • [a-z\d]*
  • $英数字の任意の量の数字
  • [a-z]
  • 任意の量のストリング
  • iフラグの終わりまでfまたは

See this demo at regex101

関連する問題