PHP ve Düzenli İfadeler soru?

4 Cevap php

Aşağıdaki kodları düzenli ifadeler kullanarak preg_match kullanarak doğru bir sokak adresini kontrol etmek için bir yol, e-posta adresi, şifre, şehir ve url olup olmadığını merak ediyorum?

Ve ben preg_match kodu nasıl düzeltmek gerekir değilse?

 preg_match ('/^[A-Z0-9 \'.-]{1,255}$/i', $trimmed['address']) //street address
 preg_match ('/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/', $trimmed['email'] //email address
 preg_match ('/^\w{4,20}$/', $trimmed['password']) //password
 preg_match ('/^[A-Z \'.-]{1,255}$/i', $trimmed['city']) //city
 preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $trimmed['url']) //url

4 Cevap

Sizin sokak adresi: ^[A-Z0-9 \'.-]{1,255}$

  • Eğer tek tırnak kaçmak gerekmez.
  • since you have a dot in the char class, it will allow all char (except newline). So effective your regex becomes ^.{1,255}$
  • you are allowing it to be of min length of 1 and max of length 255. I would suggest you to increase the min length to something more than 1.

E-posta regex: ^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$

  • again you are having . in the char class. fix that.

Parolanız regex: ^\w{4,20}$

  • allows for a passwd of length 4 to 20 and can contain only alphabets(upper and lower), digits and underscore. I would suggest you to allow special char too..to make your password stronger.

Sizin şehir regex: ^[A-Z \'.-]{1,255}$

  • . karakter sınıfında var
  • allows min length of 1 (if you want to allow cities of 1 char length this is fine).

EDIT:

Eğer regex için çok yeni olduğundan, Regular-Expressions.info biraz zaman harcamak

Bu benim için aşırı karmaşık görünüyor. Özellikle ben işe yaramaz bir kaç şey görebilirsiniz:

  1. Sizin regex gibi "Malmö" veya 서울, vb isimleri, ASCII olmayan harfler ile şehirler için başarısız olur
  2. Şifrenizi validator hatta birçok insan gibi olacak rakam veya noktalama, ek güvenlik için kendi şifreleri koymak için izin vermez (pass-cümleleri girmek için yararlı olan) şifre alanlar için izin vermez.
  3. Siz validator dairelerde yaşayan insanlar için izin vermez ele (12/345 Foo St)

(Bu ". \" Ne demek varsayarak yerine edilir "." Beri "." Şey maçları)

Ve böylece. Genel olarak, ben doğrulama için normal ifadeler üzerinde aşırı güven iyi bir şey olmadığını düşünüyorum. Muhtemelen bu alanları için bir şey için izin ve sadece onları başka bir şekilde doğrulayarak daha iyiyiz.

Örneğin, e-posta adresleri ile: bir adres geçerli sırf RFC standartlarına göre aslında bunun için e-posta göndermek mümkün olacak anlamına (veya gelmez o kişi için correct e-posta adresi olduğunu .) Bir e-posta adresini doğrulamak için tek güvenilir yolu aslında bir e-posta göndermek ve kişinin bir bağlantı veya bir şey üzerine tıklayın elde etmektir.

URL'ler ile aynı şey: Bu standarda göre geçerli sırf aslında bir web sayfası var var anlamına gelmez. Sen sayfayı almak için gerçek bir istek yapmaya çalışıyor URL'yi doğrulamak.

Ama benim kişisel tercihi sadece mümkün mutlak minimum doğrulama yapmak ve onları orada bırakmak olacaktır. Insanlar kendi profilini düzenlemek izin (ya da doğrulanıyor konum ne olursa olsun) durumda onlar bir hata yapar.

Bunlara herhangi bir kontrol için bir 'doğru' yol gerçekten yok. Bu sizin gereksinimleri tam olarak ne bağlıdır.

E-posta adresleri ve URL'ler için, ben filter_var instead of regexps - just pass it FILTER_VALIDATE_EMAIL veya FILTER_VALIDATE_URL kullanmanızı tavsiye ediyorum.

Diğer regexplerde ile, kaçmak emin olmak gerekir. Karakter sınıfları içinde (aksi takdirde her şeyi izin veririz) ve İl / Cadde olanlar gibi ''''' olarak çöp, ya da sadece boşluk izin olacağını düşünebilirsiniz.

Eğer bir adres oluşur nasıl olduğunu düşünmeyin lütfen. Şehir, kasaba ve köylerde binlerce & gibi karakterler ile vardır ve diğer alfabe gelenler.

Sadece bir ülke (örneğin ABD için USPS) özel bir API aracılığıyla bunu yapmak sürece bir adres doğrulamak için deneyin ETMEYİN.

Ve neden bir kullanıcıların şifre karakterleri sınırlamak istersiniz? Varolan dışında şifre HERHANGİ gereksinimleri yoktur.

Bu regex kullanmak eğer siteniz kullanılamaz olacaktır.