Module:Str find word/sandbox/doc
- TOC: #code ( )
Module:Str find word/links/doc
![]() | This module depends on the following other modules: |
This module looks for a word being present in a comma-separated list of words. It then returns a True
or False
value.
By default, the True-value returned is the found word itself; the False-value is a blank string. Implements {{Str find word}}.
For example, in the source string 'foo, bar' the word 'bar' appears, but the word 'november' does not.
- True:
{{#invoke:Str find word|main |source=foo, bar|word=bar}}
→ >bar< - False:
{{#invoke:Str find word|main |source=alpha, beta, gamma|word=november}}
→ ><
Complete words: the complete word is 'foobar' ... example needed ...
Multiple word check: The search can be extended to check for multiple words being present.
AND-list of words, all words must be present:
- True:
{{#invoke:Str find word|main |source=alpha, beta, gamma|andwords=beta, alpha}}
→ >beta,alpha< - False:
{{#invoke:Str find word|main |source=alpha, beta, gamma|andwords=beta, omega}}
→ ><
OR-list of words, at least one off the words must be present:
- True:
{{#invoke:Str find word|main |source=alpha, beta, gamma|orwords=beta, alpha}}
→ >beta,alpha< - False:
{{#invoke:Str find word|main |source=alpha, beta, gamma|orwords=beta, omega}}
→ >beta<
The module is aimed at template code usage. (The editor does not have to apply Lua patterns like [%a%d]*
).
Parameters
- All parameters (synonyms)
{{Str find word |string = |word = |orwords = |case= |yes = |no = |explain = }} |
{{Str find word |s = |w = |orw = |case= |yes = |no = |explain = }} |
{{Str find word |s= source= |word= andwords= andw= |orwords= orw= |case= |yes= |no= |explain= <!-- |sep=todo --> }} |
{{Str find word |s= |w= |andw= |orw= |case= |yes= |no= |explain=}}
Basic: source, word
{{Str find word |source = |word = }}
- When the word is found in the source (True), the function returns the word itself (by default), or
|yes=
value (when entered non-empty). - When not found (False), the function returns a empty string (
''
), or the|no=
value when entered.
|source=alpha, foo, lima
|
|word=foo
|
foo | ![]() |
|
|source=alpha, foo, lima
|
|word=bar
|
![]() |
full word bar not in the source | |
|source=alpha, foo, lima
|
|word=foobar
|
![]() |
word foobar not in the source as full word |
Case, Literal,
- todo: examplify
|source= |s=
|
|word= |w=
|
|case=
|
result | note |
---|---|---|---|---|
|s=alpha, foo, lima
|
|w=foo
|
→ yes | ||
|s=alpha, foo, lima
|
|w=foobar
|
→ no | ||
|s=alpha, foobar, lima
|
|w=foo
|
→ no | 'foo' is not the complete word | |
|s=alpha, FOO, lima
|
|w=foo
|
→ yes | |case=false : a=A (default)
| |
|s=alpha, FOO, lima
|
|w=foo
|
→ no | |case=true : a=/=A
|
AND-, OR-wordlist checks
|word=
as noted, can be a list of words. All will be checked with the AND-requirement (each word must be present).|andwords=
accepts a list of words that all will be checked with the AND-requirement (each word must be present).- When both
|word=
,|andwords=
are present, they are combined into one single AND-wordlist.
- When both
|orwords=
accepts a list of words that all will be checked with the OR-requirement (at least one of the words must be present).
|source= |s=
|
|andwords= , |andw= |word= |w=
|
|orwords= |orw=
|
result TODO fix | note |
---|---|---|---|---|
|s=alpha, foo, lima, delta
|
|andw=delta, lima
|
delta,lima | both words present in the source | |
|s=alpha, foo, lima, delta
|
|andw=foo, nov
|
AND-logic: A word in the AND-list is not present (nov), so false | ||
|s=alpha, foo, lima, delta
|
|andw=delta
|
delta | |w= and |andw= are combined
| |
|s=alpha, foo, lima, delta
|
|orw=delta, lima
|
delta,lima | both OR-words are present in the source | |
|s=alpha, foo, lima, delta
|
foo | OR-logic: one of the words is present (|foo= ), so true
| ||
|s=alpha, foo, lima, delta
|
|andw=alpha, lima
|
|orw=foo, nov
|
alpha,lima,foo | |
|s=alpha, foo, lima, delta
|
|andw=bar, april
|
|orw=nov, dec
|
none of the OR-words is present, so false |
True, False rephrase options |yes, no=
... |yes=Yes, hit |no=Not found
| ||||
---|---|---|---|---|
|source=alpha, foo, lima
|
|word=foo
|
Yes, hit | ![]() | |
|source=alpha, foo, lima
|
|word=foobar
|
No, not found | ![]() |
Edge cases: (blank input,)
- todo
issues and ideas
- Keep the order, Foo, bar -> foo(1), bar(2)
- eg table col userinput options, then cols in that order?
- Check comma example above (
"Hello, world"
) (currently returns: 2 hitwords & sep=comma Dec2022)
- Make sure all boolean logic is by Module:Yesno
- and resolve
nil
- option
|sep=
for output list >, < dflt
- allow pattern input = recognise (
150%, 175%, ..
) so patterns again ;-) - ignore characters eg "/"?
- cleanup (RLM), stated: named params only (wrt WS)
- option add prefix, suffix -- when success only
- list presentation..
Errors and analysis
- The logic itself does not produce errors. There is always a True of False result.
- Pages with Unknown parameters are listed in Category:Pages using str find word with unknown parameters (0).
- There are no logical errors foreseen: any flaw in the input will return a False result (for example, no input strings to check were entered).
|explain=true
: when in Preview, display a report on input, output and the logical steps (debug).|explain=testcases
: When set in ns Template or User on subpage /testcases, the Preview report is static (shown permanently).