2011-04-08 34 views
7

Herkese selam, gönderilmeden önce normal ifadeden geçen bazı metin girişlerine izin vermeye çalışıyorum. Metnin sadece A-Z, 0-9 ve boşluk "" karakterini içermesini istiyorum. İşte benim kod artık geçerli:Java'da bir boşluk karakterine izin veren Regex

if(!title.matches("[a-zA-Z0-9_]+") { 
    //fail 
} 
else { 
    //success 
} 

Ancak bu hala //fail sonuç verince, "Bu bir denemedir" gibi girdi şey

Herhangi bir fikir? Hepinize teşekkürler.

cevap

19

Regex'teki alanı dahil etmiyorsunuz. Aşağıdaki deneyin:

if (!title.matches("[a-zA-Z0-9 ]+")) 
+0

Ah ... _ _ _ bir "" olduğunu düşündüm. Yani sadece basitçe [a-zA-Z0-9] + 'çalışmalı? – JMRboosties

+0

Evet. '_' değişmez altçizgi. İstediğiniz gibi görünüyor. Örneğimi güncelledim. –

+1

Mükemmel. Çok teşekkür ederim. – JMRboosties

3

\s herhangi bir ASCII karakteri için kullanılan verir. Bunu "" yerine kullanmayı düşünün.

if(!title.matches("[a-zA-Z0-9_\s]+")) { 
    //fail 
} 
else { 
    //success 
} 
+3

Hayır, 's s sadece 7 bit veri içindir. Java’nın yerel karakter kümesinde çalışmıyor. – tchrist

+0

Bu haber bana! Sanırım biraz daha dikkatli olmalıyım. –

+1

Standart Java regex kitaplığı ile ilgili sorun budur. Java'nın kendi karakter seti ile çalışmıyor! Uygun bir şekilde çalışan herhangi bir şey elde etmek için ICI'lara göre JNI'ye sahip olmanız gerekir - bunun anlamı, en azından minimum olarak, temel Unicode işlevselliği için Seviye 1 gereklilikleri ile uyumludur [UTS # 18 Unicode Düzenli İfadeler] (http://unicode.org/reports/tr18/). Java, Seviye 2 veya Seviye 3 arazisinde bir şey kalmasına izin vermeden, bunların çoğunu karşılamıyor. Bu yüzden Google, Android için JNI'dan ICU'ya bir şey yapıyor. Unicode desteğine ihtiyaçları var. – tchrist

İlgili konular