Nasıl sembolleri izin vermeyen bir düzenli ifade oluşturabilirim?

7 Cevap php

Hey, I got a question regarding regexp in general. I'm currently building a register form where you can enter the full name (given name and family name) however I cant use [a-zA-Z] as a validation check because that would exclude everyone with a "foreign" character.

Onlar php ve javascript hem de bir sembol girmeyin emin olmak için en iyi yolu nedir?

Şimdiden teşekkürler!

7 Cevap

(Genel olarak) bu sorun için doğru çözümdür POSIX character classes. Özellikle, [:alpha:] kullanmak için (veya [:alphanum:]) bunu yapmak mümkün olmalıdır.

Neden bunu yazarken tam olarak kendi adını girmesini engellemek istiyorsun rağmen? Eğer karakterler kendi adlarına izin tam olarak ne anlatmak için bir konumda olduğuna emin misin?

Önce kavramsal bir "yabancı" karakteri ve birbirinden ayırt etmek gerekir "sembolü." Burada açıklamak gerekebilir.

Diğer diller için muhasebe diğer kod sayfaları için muhasebe anlamına gelir ve bu gerçekten basit işleçleri kapsamı dışındadır. Bu yapılabilir, ama daha yüksek bir düzeyde, kod sayfaları çalışmak zorunda.

Eğer kesinlikle noktalama ve semboller üzerinde başarısız olmasına regexpi istedim, [^[:punct:]] kullanabilirsiniz, ama ben [:punct:] POSIX sınıf garip unicode bazı semboller nasıl tepki vereceğini emin değilim. Bu tabii ('-' gibi bir noktalama işareti) ama onların adı olarak "John Smythe-Jones" koyarak bazı birini durdurmak olacaktır, bu yüzden muhtemelen bunu kullanarak karşı tavsiye ediyorum.

Bunun iyi bir fikir olduğunu sanmıyorum. Bkz How to check real names and surnames - PHP

Ben geçerli olup ne için hesap nasıl bilmiyorum, ve global erişim bağlı olarak, muhtemelen birilerini kilitleme olmadan bir şey çıkarmak mümkün olmayacaktır. Ama Google arama yardımcı olabilir ki, bu kadar açık.

http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_symbol_characters_web_page

Sen giriş dizesi döngü olabilir ve her karakter için tamsayı karakter kodu almak için String.charCodeAt () işlevini kullanın. Kabul edilebilir bir karakter yelpazesi ile kendinizi ayarlayın ve karşılaştırma yapmak.

Kaydetti POSIX karakter sınıfları muhtemelen en iyi bahis gibi. Ama onların desteği (ve alternatiflerin) ayrıntıları belirli regex varyantın detayları ile çok değişir.

PHP görünüşe göre onları desteklemiyor, fakat JavaScript not yapar.

/ [\ U0400-\ u04FF] / herhangi bir Kiril karakteri ile eşleşir: JavaScript karakter aralıkları kullanmak gerekir için bu demektir. Açıkçası bu biraz yazı alacak, ancak (W3C) değil, XML 1.0 Önergesi artık eski birkaç yıl olsa aralıkları bir sürü bir listesini içerir.

Bir yaklaşım JavaScript istemci üzerinde sınırlı bir kontrol var olabilir, ve tam check yalnızca sunucu tarafı.