File: patterns.md

package info (click to toggle)
reflect-cpp 0.18.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 12,524 kB
  • sloc: cpp: 44,484; python: 131; makefile: 30; sh: 3
file content (28 lines) | stat: -rw-r--r-- 1,167 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# `rfl::Pattern`

`rfl::Pattern` can be used to verify that a string fits a particular pattern, the latter of which is expressed as a regular expression.

A common problem for backend applications or data pipelines is SQL injection. `rfl::Pattern` can be used to limit the allowed characters
users are able to pass. For instance, for table names, we might only allow uppercase characters and
underscores:

```cpp
using TableName = rfl::Pattern<R"(^[A-Z]+(?:_[A-Z]+)*$)", "TableName">;
```

Because the regex is encoded at compile time, you can be certain that whenever you use the type `TableName`, the string contained
therein will fit the pattern. This is a very strong safeguard against SQL injection.

Note that use also have to give a reasonable name to the pattern. That is, because reflect-cpp emphasizes readable error messages and regex patterns can be somewhat hard to decipher at times.

To retrieve the underlying string, you can use the `.value()` method.

reflect-cpp currently contains the following predefined regex patterns:

- `rfl::AlphaNumeric`
- `rfl::Base64Encoded`
- `rfl::Email`
- `rfl::UUIDv1`
- `rfl::UUIDv2`
- `rfl::UUIDv3`
- `rfl::UUIDv4`