Regex care permite un caracter de spațiu în Java (Programare, Java, Regex)

JMRboosties a intrebat.

Salut tuturor, deci încerc să permit o intrare de text care trece printr-o verificare regex înainte de a fi trimisă. Vreau ca textul să includă doar A-Z, 0-9 și caracterul spațiu ” „. Aici este codul meu acum:

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

Cu toate acestea, acest lucru dă în continuare //fail rezultat atunci când introduc ceva de genul „Acesta este un test”

Aveți vreo idee? Vă mulțumesc tuturor.

2 răspunsuri
Jason McCreary

Nu includeți spațiul în Regex. Încercați următoarele:

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

Comentarii

  • Ah… Am crezut că _ reprezintă un ” „. Deci, pur și simplu [a-zA-Z0-9 ]+ ar trebui să funcționeze? –  > Por JMRboosties.
  • Da. _ este sublinierea literală. Ceea ce se pare că nu doriți. Am actualizat exemplul meu. –  > Por Jason McCreary.
  • Perfect. Vă mulțumesc foarte mult. –  > Por JMRboosties.
Scott Nguyen

s permite orice caracter ASCII de spațiu alb. Luați în considerare utilizarea acestuia în loc de ” „.

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

Comentarii

  • Nu, s este numai pentru date pe 7 biți. Nu funcționează pe setul de caractere nativ Java. –  > Por tchrist.
  • Asta e o noutate pentru mine! Cred că ar trebui să fiu puțin mai atent. –  > Por Scott Nguyen.
  • Aceasta este problema cu biblioteca standard Java regex. Nu funcționează cu propriul set de caractere Java! Pentru a obține ceva care să funcționeze corect, trebuie să treceți prin JNI la ICU, adică să respecte cel puțin cerințele de nivel 1 pentru funcționalitatea Unicode de bază, care sunt prezentate în detaliu UTS#18 Unicode Regular Expressions. Java nu îndeplinește majoritatea acestor cerințe, ca să nu mai vorbim de nimic din ceea ce se află mai sus, la nivelul 2 sau 3. De aceea, Google face chestia JNI-to-ICU pentru Android. Ei au nevoie de suport Unicode. –  > Por tchrist.

Tags:,