Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

String Validierung für Autocomplete Frage

More
3 weeks 3 days ago #274809 by BBSR-SR5
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version: LimeSurvey Cloud Version 6.17.13
Eigener Server oder LimeSurvey-Cloud: Cloud
Genutzte Designvorlage: Fruity 23
==================
Hallo in die Runde,

ich möchte um die Gemeinde der Befragten abzufragen easy Autocomplete aus Joffm's pdf verwenden:  www.mafosurvey.de/lime/Tutorial_Autocomplete.pdf

Da kann ich dann alle 6000 Gemeinden Deutschlands reinkippen und das Autocomplete funktioniert super. Was mir jetzt allerdings fehlt ist eine Validierung, falls jemand dann "Kleintütenhausen" reinschreibt (was es nicht gibt). Was für Möglichkeiten gibt es da?

Ad hoc wäre mir nur eine Horror Validierungsregex eingefallen, wo alle 6000 Gemeinden mit einem exact String match abgefragt werden. 

Also sowas: 
Code:
\b(?:hello|world|bananas)\b
für die genauen Termini "hello","world" und "bananas".

Nur halt mit 6000 substrings. Gibt es da eine bessere Methode, bzw. ist meine Regex Idee überhaupt Valide? (Ich hatte es noch nicht ausprobiert)

Ich hab mal meine Dateien angehängt um das Scenario zu reproduzieren. Einfach die Dateien aus der .zip in den Resources Folder von ner Umfrage und dann einfach die Frage importieren.

Vielen Dank :)
 

Please Log in to join the conversation.

More
3 weeks 3 days ago #274815 by Joffm
Hallo,
bitte, weder lsq noch lsg Exporte, nur lss.
Erspare es uns, zunächst eine Umfrage anzulegen, dort eine Gruppe, um schlussendlich Deine Frage importieren zu können.
Und dann könnte es noch passieren, dass Du eine andere Sprache , (z.B. Deutsch-Du) benutzt - und alles geht in die Hose,

Okay, easy-autocomplete. Aber warum nicht die simple kürzere Lösung aus Kapitel 2.1.3.?
Dazu gibt es ja einen Thread hier im deutschen Teil, wo es um nahezu 10000 Gemeinden geht.
Tony hat ja dieses "autocomplete" script extra für mehrstufige Abfragen erstellt.

Gut, kommen wir zu Deiner Frage.
Mir ist spontan eingefallen, im Anschluss mit der Bibliothek "Papaparse" nachzugucken, ob die Gemeinde in der Datei existiert. 
Eine andere - etwas hauruckmäßige - Idee wäre, an jeden Gemeindenamen einen unsichtbaren Character einzufügen. Wenn er nicht vorhanden ist, hat der Teilnehmer eben etwas reingeschrieben. Darauf kannst Du ja mit RegExp testen. Diesen Character entfernt man dann am Ende mit ExpressionScript.

Beides nur Ideen. Jetzt fahre ich aber an unseren Badesee.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
3 weeks 2 days ago #274816 by BBSR-SR5
Hallo Joffm,

danke dir für das Feedback. Sorry für die falsche Datei, bei mir war es gestern auch heiß. So jetzt aber einfach als resources.zip und die Umfrage als .lss. Ich hoffe du hattest einen schönen Abend am Badesee :)

Ein bisschen Hintergrund. Ich bastele gerade an einem Python Tooling um Fragen mit nem multiplen Autocomplete einfach und automatisiert zu basteln. Klassischer Usecase bei uns wäre in der Tat die Gemeindeabfrage, aber im Prinzip bietet sich da natürlich auch eine Vorauswahl nach Bundesland oder so an. Deswegen auch gleich mit der Mehrstufigen Version. Mein Ziel ist es, dass die Leute gezwungen werdden können eine Valide gemeinde einzugeben, also die Frage auf zwingend notwendig gestellt werden kann und man nur weiterkommt, wenn auch eine valide Gemeinde ausgewählt wurde.

Ich habe mir einfach mal die "horror regex" per Script schreiben lassen (siehe .txt), aber LimeSurvey erlaubt nur eine maximallänge für den Regex string und das Ding ist definitiv drüber. Die option mit dem regex auf einen invisible character wäre sicherlich möglich, aber doof wenn die Leute sowas wie "Bremen" selber eintippen und sich dann wundern, warum die Frage nicht completed.

Mir ging es auch gar nicht so sehr darum, wie ich rausfinde ob mein String in meiner Liste ist, sondern mehr wie ich LimeSurvey dazu kriege die Person nicht auf weiter klicken zu lassen bis das Valide ausgefüllt ist im Rahmen der normalen LimeSurvey UX (Also ohne so quatsch wie den weiter Button ausblenden solange input invalide ist).

Was ist da grob der Lösungsraum?
Außer dem (regex Kram) ist mir noch eingefallen einfach eine zweite Frage in die Gruppe zu batschen und die per .js automatisch zu befüllen, wenn in der ersten Frage eine Valide Antwort ist. (und wenn nicht den Text wieder löschen) und die Frage dann auf Zwingend stellen, die Frage per .css oder Einstellung unsichtbar machen und eventuell den Text im Popup Fenster mit .js anpassen?

Please Log in to join the conversation.

More
3 weeks 2 days ago - 3 weeks 2 days ago #274817 by Joffm
Hallo,
das war alles etwas zu kompliziert gedacht.
Wenn Du die Standard-autocomplete-Lösung benutzt, werden die Namen ja in ein array eingelesen.
D.h. aber: Alles, was Du machen musst, ist zu prüfen, ob der eingegebene Name im Array vorhanden ist.
Hier ein ganz grobes Beispiel mit der hier schon öfter gezeigten plzort-Datei.




Im Ernstfall würde man statt des "alert" die Klasse "has-error" hinzufügen und etwas Farbe machen.
Allerdings hängt es auch davon ab, ob dies die einzige Frage auf der Seite ist (dann kann man den "onClick" event benutzen), oder eben nicht (dann vielleicht "onBlur").

Musst Du sagen.
Wenn es meine Zeit erlaubt, friemele ich einmal die json-Datei auseinander und mache ein volles Beispiel.

Bis dann
Joffm 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 3 weeks 2 days ago by Joffm.

Please Log in to join the conversation.

More
3 weeks 2 days ago #274819 by BBSR-SR5
Hallo Joffm,

ich habe die Liste mal als .csv angehängt :)

Für mich ist die Herausforderung meinen bool "complete_check == false" in ein "Weiter/Abschließen Knopf geht nicht" umzuwandeln. Den Rest kriege ich schon irgendwie selber hin, das ist ja auch kein Hexenwerk.

Sorry, wenn ich da etwas unklar war.

Please Log in to join the conversation.

More
3 weeks 2 days ago #274821 by Joffm
So, ich habe mir einmal etwas aus der Feder gequält.
Um ehrlich zu sein: ich habe ein anderes script von Tony verwurstet, sprich angepasst.

Gut, im positiven Fall ist nichts zu zeigen.
Im negativen Fall wird im Eingabefeld eine Meldung gezeigt und gleichzeitig der "Weiter"-Button disabled.
Nach 2,5 Sekunden wird dies wieder rückgängig gemacht -> kein roter Hintergrund, Feld leer, Button enabled.
 
Kann man ja alles ändern.

 

File Attachment:

File Name: limesurvey...6954.lss
File Size:34.19 KB


Joffm

P.S. In der csv ist noch der Header "Gemeinden" vorhanden; es gibt also einen Ort dieses Namens.

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 weeks 3 days ago - 2 weeks 3 days ago #274869 by Joffm
Und jetzt kommt die m.E. ultimative Möglichkeit.
Die Bibliothek "select2".
[url] select2.org/ [/url]

Vorteil: Du kannst nichts einfach eintippen, was nicht vorhanden ist.
 

Nachteil: Ich habe keine Ahnung, wie man ein json-file einliest. Da musst Du selbst einmal die Dokumentation anschauen.
Aber man kann die 10000 Orte auch locker in den Quelltext schreiben, also
Code:
<option value="1">Flensburg, Stadt</option>\
<option value="2">Kiel, Landeshauptstadt</option>\
<option value="3">Lübeck, Hansestadt</option>\
<option value="4">Neumünster, Stadt</option>\
<option value="5">Albersdorf</option>\
 ...
<option value="10953">Thonhausen</option>\
<option value="10954">Treben</option>\
<option value="10955">Vollmershain</option>\
<option value="10956">Windischleuba</option>\


Gut, man muss noch einmal genau schauen, dass die Ortsnamen keine unzulässigen Zeichen enthalten, wie z.B. das einfache Anführungszeichen bei "Fürstl. Löwenstein'scher Park".


Diese screenshots sind aus einem von mir gerade verwursteten Beispiel von Tony.
Ich werde es noch etwas "schöner machen" und schicke ann eine lss.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 3 days ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 1 day ago #274877 by Joffm
So, hier eine lss.
Ich habe das character set der Ortsnamen angepasst.
Die in diesem script vorhandenen Texte habe ich eingedeutscht.
Es bleibt das "No result found". Dies ist in der "select2.min.js". Wenn Du diese von CDN herunterlädst und auf dem eigenen Server speicherst, kannst Du diesen Text ja ebenfalls ändern.

Damit benötigst Du keinerlei weitere Validierung. 

File Attachment:

File Name: gemeinden.lss
File Size:519.66 KB


Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 weeks 16 hours ago #274885 by Mazi
Wäre nicht auch Bootstrap Dropdown mit aktivierter Suchfunktion eine Option?

Per Quick-add lässt sich die Liste der Antworten einfügen und dann wären nur vorhandene Einträge wählbar.

Best regards/Beste Grüße,
Dr. Marcel Minke
survey-consulting.com
offlinesurveys.com
Feel free to contact me by email for professional LimeSurvey support!

Please Log in to join the conversation.

More
2 weeks 14 hours ago #274886 by TimTom420
Thanks for the examples and the different approaches, especially the Select2 solution.

I think Select2 is probably the cleanest approach for this use case because it prevents invalid entries instead of validating them afterwards. It also provides a better user experience than showing an error only after the user has typed an invalid municipality.

The Bootstrap searchable dropdown mentioned by Mazi also looks interesting, but Select2 seems more mature for handling very large datasets.

Thanks everyone for the ideas!

Please Log in to join the conversation.

More
2 weeks 14 hours ago - 2 weeks 13 hours ago #274887 by Joffm
Ja, das wäre es schon..
Aber hier wird aus 10000 Optionen ausgewählt.
Da macht LimeSurvey nicht mit.

Joffm 

TimTom420:
Dies ist der deutsche Teil des Forums. 
Bitte, Sprachdisziplin.

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 13 hours ago by Joffm.

Please Log in to join the conversation.

More
1 week 6 days ago #274896 by Mazi
10000 Optionen hinzuzufügen ist in der Tat eine Menge. Meist verhindert es die Standard-PHP-Konfiguration. Hier wäre max_input_vars auf einen passenden Wert wie z. B. 50000 zu erhöhen, damit das Speichern der Einträge überhaupt klappt.

Best regards/Beste Grüße,
Dr. Marcel Minke
survey-consulting.com
offlinesurveys.com
Feel free to contact me by email for professional LimeSurvey support!

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose