summaryrefslogtreecommitdiff
path: root/docs/designers/language-basic-syntax/language-syntax-operators.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/designers/language-basic-syntax/language-syntax-operators.md')
-rw-r--r--docs/designers/language-basic-syntax/language-syntax-operators.md114
1 files changed, 114 insertions, 0 deletions
diff --git a/docs/designers/language-basic-syntax/language-syntax-operators.md b/docs/designers/language-basic-syntax/language-syntax-operators.md
index 98a56538..965327c3 100644
--- a/docs/designers/language-basic-syntax/language-syntax-operators.md
+++ b/docs/designers/language-basic-syntax/language-syntax-operators.md
@@ -50,6 +50,120 @@ separated from surrounding elements by spaces. Note that items listed in
| is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 |
| is in | | $a is in $b | exists in array | in_array($a, $b) |
| is \[not\] in | | $a is not in $b | does not exist in array | !in_array($a, $b) |
+| matches | | $a matches $b | regex pattern match | preg_match($b, $a) |
+
+## Regex Matching Operator
+
+The `matches` operator allows you to test if a string matches a regular expression pattern.
+
+### Basic Usage
+
+```smarty
+{if "hello" matches "/^[a-z]+$/"}
+ String matches the pattern!
+{/if}
+
+{if $email matches "/^[^@]+@[^@]+\.[^@]+$/"}
+ Valid email format
+{else}
+ Invalid email format
+{/if}
+```
+
+### Using Variables
+
+```smarty
+{$pattern = '/^[a-zA-Z0-9]{8,}$/'}
+{if $password matches $pattern}
+ Password meets requirements
+{else}
+ Password must be at least 8 alphanumeric characters
+{/if}
+```
+
+### Pattern Modifiers
+
+The `matches` operator supports all standard PHP regex modifiers:
+
+```smarty
+{* Case insensitive matching *}
+{if "HELLO" matches "/hello/i"}
+ Matches (case insensitive)
+{/if}
+
+{* Multiline mode *}
+{if "line1\nline2" matches "/line2$/m"}
+ Matches in multiline mode
+{/if}
+
+{* Dot matches newlines *}
+{if "hello\nworld" matches "/hello.world/s"}
+ Matches with dotall modifier
+{/if}
+```
+
+### Complex Conditions
+
+The `matches` operator can be combined with other operators:
+
+```smarty
+{if $username matches "/^[a-z]+$/" && $username|length > 3}
+ Valid username
+{else}
+ Username must be lowercase letters and at least 4 characters
+{/if}
+
+{if $input matches "/^[0-9]+$/" || $input matches "/^[a-z]+$/"}
+ Input is either numeric or lowercase letters
+{else}
+ Invalid input format
+{/if}
+```
+
+### Practical Examples
+
+**Email Validation:**
+```smarty
+{if $email matches "/^[^@\s]+@[^@\s]+\.[^@\s]+$/"}
+ Valid email address
+{else}
+ Please enter a valid email address
+{/if}
+```
+
+**Password Strength:**
+```smarty
+{if $password matches "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/"}
+ Strong password
+{else}
+ Password must contain uppercase, lowercase, numbers and be at least 8 characters
+{/if}
+```
+
+**URL Validation:**
+```smarty
+{if $url matches "/^https?:\/\/(www\.)?[a-z0-9\-]+(\.[a-z]{2,})+/i"}
+ Valid URL format
+{else}
+ Please enter a valid URL
+{/if}
+```
+
+**Numeric Validation:**
+```smarty
+{if $input matches "/^[0-9]+$/"}
+ Valid numeric input
+{else}
+ Please enter numbers only
+{/if}
+```
+
+### Notes
+
+- The `matches` operator uses PHP's `preg_match()` function internally
+- Pattern delimiters must be valid regex delimiters (typically `/`)
+- Invalid patterns will cause PHP warnings but won't break template execution
+- For complex regex patterns, consider using variables for better readability
## Ternary
You can use the `?:` (or ternary) operator to test one expression and present the value