PHP 3 ve 16 karakter arasında kelimeler için düzenli ifade

4 Cevap php

Ben normal ifadeler tamamen yeni değilim, ve ben bir metnin dışında hepsi en az 3 karakter kelimeleri (ve maksimum 16 boyutu) filtre gerekir. (Bu yüzden bir MySQL veritabanı içine bu verileri girebilirsiniz)

Şu anda, her şey düzenli ifade hariç, çalışır:

/^.{3,16}$/

(Google ;-) kullanarak bulunan bir öğretici bu inşa)

Thanks! Yvan

Örnek Veri:

rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox

PHP Kodu (evet, biliyorum - bu tür özensiz - bu sadece sorguları oluşturmak için kullanılır ...)

<?php
    //regexer.php

    $text = @$_REQUEST['fText'];
    if ($text == '') {
?>
<form method="post" action="">
    <input type="text" name="regex" />
    <textarea name="fText"></textarea>
    <br />
    <input type="submit"></input>
</form>
<?php 
    } else {
        preg_match_all($_REQUEST['regex'], $_REQUEST['fText'], $matches);
        header ("Content-type: text/plain");
        foreach ($matches as $match) {
            //print_r($match);
            echo ("INSERT INTO maf_codes (Code, GameID) VALUES ('$match', %GAMEID%);\n");
        }
    }
?>

Regex çalışması yaptı ile $ _REQUEST ['regex'] yerine ;): bir çözüm bulundu

4 Cevap

Bu deneyin:

/\b\w{3,16}\b/

Açıklaması:

  • \b bir kelime sınır maçlar
  • \w bir sözcük karakteriyle eşleşir
  • {3,16} \w için geçerlidir ve en az 3 ve en fazla 16 karakter ile uyumlu olması gerektiğini gösterir.

Bilginize: Eğer metin uzun dizeleri ile eşleşmeleri bulmak istediğiniz gibi görünüyor, çünkü ben başlangıç ​​çapa (^) ve bitiş çapa ($) Eğer söz kaydetti regex çıkartılmıştır giriş ve çapa tüm giriş dizesi eşleşen yalnızca örneklerini eşleşen kısıtlamak gibi.

GÜNCELLEME:

İşte bu regex çalışır kanıtıdır:

<?php

$input = 'rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox';

$matches = array();

preg_match_all('/\b\w{3,16}\b/', $input, $matches);

print_r($matches);

?>

Çıkışlar:

Array
(
    [0] => Array
        (
            [0] => rjm1986
            [1] => SinuhePalma
            [2] => excel2010
            [3] => Jimineedles
            [4] => 209663603
            [5] => C6A7XR
            [6] => Snojog
            [7] => XmafiaX
            [8] => Cival2
            [9] => HitmanPirrie
            [10] => MAX
            [11] => 4163016
            [12] => Dredd23
            [13] => Daddy420
            [14] => mattpauley
            [15] => Mykillurdeath
            [16] => 244833585
            [17] => KCKnight
            [18] => Greystoke
            [19] => Fatbastard
            [20] => Fucku4
            [21] => Davkar
            [22] => Banchy2
            [23] => ET187
            [24] => Slayr69
            [25] => Nik1236
            [26] => SeriousAl
            [27] => 315791
            [28] => 216996334
            [29] => K1ra
            [30] => Koops1
            [31] => LastFallout
            [32] => zmileben
            [33] => bismark
            [34] => Krlssi
            [35] => FuckOff1
            [36] => 1owni
            [37] => Ulme
            [38] => Rxtvjq
            [39] => halfdeadman
            [40] => Jamacola
            [41] => LBTG1008
            [42] => toypark
            [43] => Magicman6497
            [44] => Tyboe187
            [45] => Bob187
            [46] => Zetrox
        )

)

Eğer tam olarak çalışmıyor ne söyleyebilirsiniz? Ama yine de ben senin regex size word boundary metacharacter \b kullanmak gerektiğini düşünüyorum:

/\b\w{3,16}\b/

Update: Bu benim için çalışıyor. Bu:

<?php
$a = array();

preg_match_all('/\b\w{3,16}\b/', "rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox", $a);

print_r($a);

bana verir:

Array
(
    [0] => Array
        (
            [0] => rjm1986
            [1] => SinuhePalma
            [2] => excel2010
            [3] => Jimineedles
            [4] => 209663603
            //.... lot more here...
            [45] => Bob187
            [46] => Zetrox
        )

)

Ayrıca karşılaşmalar sonucu dizinin ilk girişinde, bu yüzden yapmak zorunda unutmayın:

 foreach ($matches[0] as $match) {
        print_r($match);
        //...
 }

Ve bunu kullanmadan önce $matches beyan etmek zorunda:

$matches = array();
preg_match_all($_REQUEST['regex'], $_REQUEST['fText'], $matches);

Diğerleri söylediler, şu bunu yapacağız.

/\b\w{3,16}\b/g

Orijinal hat (aşağıda) işe yaramadı nedeni çünkü:

/^.{3,16}$/
  1. ^ ve $ bir satırın başlangıcı ve sonu için stand. Eğer bir çizgi içinde kelimeleri ayıklamak istediğiniz gibi görünüyor.
  2. . boşluk veya özel karakterler de dahil olmak üzere hiç bir karakteri maç olacak.

Sadece kullanabilirsiniz strlen().

$mystr="rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox";
$s = explode(" ",$mystr);
foreach($s as $v){
    $len=strlen($v);
    if($len>=3 && $len<=16){
        echo "found: $v\n";
    }
}