Nasıl bir dize yalnızca belirli izin verilen karakterleri içeren bir regex ile kontrol edebilirsiniz?

4 Cevap php

Ben özel bir düzenli ifade ihtiyaç ve herhangi onlara hiçbir deneyime sahip, bu yüzden bu konuda seninle çocuklar için dönüm duyuyorum.

Ben neredeyse, bunun içinde herhangi bir özel karakter yok bu yüzden seri ilanlar başlık alan doğrulamak gerekir.

Sadece harf ve sayılar izin verilmeli ve ayrıca üç İsveçli harfler a, ä, ö (üst veya küçük harf).

Yukarıdaki yanı sıra, bu da izin verilmelkimlikir:

  • "&" imzalarlar.
  • Parantez "()"
  • Matematiksel işaretler, "-", "+", "%", "/", "*"
  • Dolar ve Euro işaretleri
  • Bir aksan imzalı mektup: "é". / / Sadece bu gereklkimlikir
  • Çift tırnak ve tek tırnak işaretleri.
  • Virgül "," ve "noktası." işaretler

4 Cevap

Bu deneyin:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$

Dağılımı:

^ = dizenin başlangıç ​​maçları

[...]* = Bir veya daha fazla kez parantez içinde herhangi bir karakter (veya aralıkları) maçları

$ = dizenin sonuna maçları

Updated yorumlardan tüm önerileri ile. Teşekkürler çocuklar!

PHP metin doğrulama ile yardımcı olabilecek çeşitli fonksiyonları vardır. Düz bir regex daha onları daha uygun bulabilirsiniz. Göz önünde strip_tags() , htmlspecialchars() , htmlentities()

Eğer> PHP5.2 çalıştırıyorsanız yanı sıra, tam olarak sizin durumunuz için tasarlanmış mükemmel Filter işlevlerini kullanabilirsiniz.

^[\sa-zA-Z0-9åäö&()+%/*$€é,.'"-]*$

Gerekli tüm karakterleri maç olacak.

PHP:

if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) {
 # Successful match
} else {
 # Match attempt failed
}

Hey ahbap, bu gerçekten çok çok basit. Sadece bir regex istemediğiniz bir şey değiştiririm ...

Bu örnekte - Ben basit "bu şeyler izin verilmiyor" demek

Onun bu regex maçta, boş bir dize ile bu karakteri değiştirmek değilse daha spesifik olarak "diyor.

PHP:

$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.])#imx', '', $subject);

Eğer varsa section a-zA-Z0-9£()+=%/*$ sadece regex geçmek ve sonrası izin karakterle sizin istediğiniz eklerseniz.


Edit:

Daha geniş

Regex bu vbersion tüm harf ve küçük harf aksanlı karakterler içeriyor. Ben bunları yazmak için tuşa bilmiyorum olarak ASCII formatında!

$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.\x99\xBC\xBD\xBE\xC0\xC1\xC2\xC3\xC4\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD1\xD2\xD3\xD4\xD5\xD6\xE0\xE1\xE2\xE3\xE4\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF9\xFA\xFB\xFC\xFD])#imx', '', $subject);