Vizualizări regex: excludeți șirurile alfabetice, precum și pe cele cu spații (Drupal, Vizualizări)

Patrick Kenny a intrebat.

Am folosit următoarele expresie regulată pe câmpul Taxonomy term name pentru a exclude șirurile formate doar din nume alfabetice:

[^a-zA-Z]

Acum vreau să exclud aceste șiruri plus orice șir cu un spațiu.

Ce vreau să fac:

  • Bună ziua (nu)
  • Bună ziua, ce mai faceți (nu)
  • ハロー (ok)

Am încercat acest lucru:

[^a-zA-Zs]

Acest lucru exclude șirurile alfabetice, dar nu și șirurile alfabetice cu un spațiu:

  • Bună ziua (nu)
  • Hi how are you (yes-> ar trebui să fie no)
  • ハロー(ok)

Ce fac greșit?

1 răspunsuri
kiamlaluno

Modulul Vizualizări folosește expresii regulate MySQL, , iar s nu este recunoscut în aceste expresii regulate.

Ar trebui să încercați cu [^a-zA-Z[:blank:]], sau [^a-zA-Z[:space:]]]. Primul exclude orice caracter de spațiu alb, în timp ce al doilea exclude orice spațiu, tabulație, linie nouă și revenire la cărămidă.

În cazul views_handler_filter_string clasa, metoda asociată cu expresia regulată este următoarea.

  function op_regex($field) {
    $this->query->add_where($this->options['group'], $field, $this->value, 'RLIKE');
  }
// Add regexp support for MySQL.
if (Database::getConnection()->databaseType() == 'mysql') {
  $operators += array(
    'regular_expression' => array(
      'title' => t('Regular expression'), 
      'short' => t('regex'), 
      'method' => 'op_regex', 
      'values' => 1,
    ),
  );
}

Comentarii

  • Știu că acest răspuns este vechi de 7 ani, dar ar fi bine să rețineți că MariaDB 10.0.5 a trecut la PCRE, , astfel încât toate bunătățile obișnuite ale regex-urilor, cum ar fi clasele de caractere prescurtate, look-ahead și look-behind și modificatorii de opțiuni ar trebui să fie suportate în Vizualizări dacă site-ul dvs. rulează pe MariaDB mai degrabă decât pe MySQL. Tocmai am testat-o pe unul dintre site-urile mele și pare să funcționeze foarte bine. Am configurat un filtru care utilizează un regex cu modificatorul insensibil la majuscule și minuscule și un look-ahead negativ și obțin exact rezultatele la care mă așteptam, fără erori. –  > Por morbiD.
  • Da, ar trebui să adaug o notă despre acele motoare de baze de date care Database::getConnection()->databaseType() raportează a fi mysql. –  > Por kiamlaluno.