2013-03-14 18 views

cevap

13

Düzenli ifadeler kullanmak istemiyorsanız, fnmatch() bu [sınırlı] amaç için size iyi hizmet edebilir. Beklediğiniz gibi kabuk benzeri joker karakterler kullanarak dizeleri eşleştirir.

if (fnmatch('*@some.text.here', $admin)) { 

} 
+1

Size bir +1 vereceğim çünkü bu fonksiyonu hiç kullanmadan çok daha önce hiç fark etmedim. – Dave

+0

fnmatch, dosya adlarıyla ilgili 4096 karakterden uzun uyarılarla başarısız oluyor. Bir dosya kümesini eşleştirdiğim için fnmatch kullanamıyorum – slebetman

+0

@slebetman Teşekkürler. Bilmek güzel. – Wiseguy

1
if (strstr ($admin,"@some.text.here")) { 

} 

kullanım strstr() İstediğin ya da ne yapacağım işaret stristr() olarak

Yoksa (bu

$pos = strrpos($mystring, "@some.text.here"); 
if ($pos === false) { // note: three equal signs 
    // not found... 
} else { 
    //found 
} 

gibi Ya ucundan strpos şey kullanın Ben sınanmadım)

$checkstring = "@some.text.here"; 
$pos = strrpos($mystring, $checkstring, -(strlen($checkstring))); 
if ($pos === false) { // note: three equal signs 
    // not found... 
} else { 
    //found 
} 
+0

stristr, bu – Waygood

+0

'un büyük/küçük harf duyarsız sürümüdür. Bu, '@ some.text.here' dizesinin sonunda olup olmadığını farketmez. – Emissary

+0

Örneğinde, metinde sadece metnin içinde bulunduğu belirli bir yerde olmanın özel olup olmadığı konusunda bir açıklama yapmadı. Strlen'i her zaman bir strlen - offset ile kullanabilirsiniz, ancak dizgenin sonundan – Dave

3

Sadece dizenin arttığınız değerle bitip bitmediğini kontrol edebilirsiniz. e bekliyor: Eğer @ some.text.here meydana emin olmak gerekiyorsa

if (strpos($admin, '@some.test.here') !== false) { } 

: bir dize strpos() olacağını başka dizesinde bulunursa

$suffix = '@some.text.here'; 

if (substr($admin, -strlen($suffix)) == $suffix) { 
    // Do something 
} 
0

en hızlı yöntem kontrol etmek sonunda, bunun yerine substr_compare() kullanmak istersiniz.

if (substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0) {} 
+0

eğer bununla başlarsa, döndürülen konum 0 = yanlışdır - Dave'in cevabına bakın – Waygood

+0

Sorun, '0' örtük olarak 'false' değerine dönüştürüldüyse, _explicitly_ 'false' öğesine dönüştürülürse ('!!' veya doğrudan) döküm) bunu değiştirmeyecek. – Wiseguy

+0

Oh, kesinlikle doğru. Bunun hakkında ne düşündüğümü bilmiyorum. – Sturm

3

İşte size bir joker karakteridir.
*'u kullanmak istediğiniz için sadece . (tek karakterli eşleşme) yorumunu yaptım.

Bu boyunca joker kullanmanızı sağlayacak:
*xxx - "xx" ile başlar ve "zz"
*xx* ile biter - - başlar
xx*zz "xxx" -
xxx* "xxx" biter vardır " orta

function wildcard_match($pattern, $subject) 
{ 
    $pattern='/^'.preg_quote($pattern).'$/'; 
    $pattern=str_replace('\*', '.*', $pattern); 
    //$pattern=str_replace('\.', '.', $pattern); 
    if(!preg_match($pattern, $subject, $regs)) return false; 
    return true; 
} 
if (wildcard_match('*@some.text.here', $admin)) { 

} 

AMA içinde xx" Ben preg_match() kendinizi regular expressions kullanmayı öğrenme öneririz.

+2

['fnmatch()'] 'a bir göz atın (http://php.net/fnmatch). – Wiseguy

+0

ooooh! Bunu daha önce hiç görmedim! Güzel! – Waygood

İlgili konular