6.4 String Field Types

The line field type specifier can be used to restrict the value of a field to a single line, i.e. no newline characters are allowed. For example, a type for proper names could be declared as:

%typedef: Name_t line

Examples of fields of type line:

Name: Mr. Foo Bar
Name: Mrs. Bar Baz
Name: This is
+ invalid

Sometimes it is the maximum size of the field value that shall be restricted. The size field type specifier can be used to define the maximum number of characters a field value can have. For example, if we were collecting input that will get written in a paper-based forms system allowing up to 25 characters width entries, we could declare the entries as:

%typedef: Address_t size 25

Note that hexadecimal and octal integer constants can also be used to specify field sizes:

%typedef: Address_t size 0x18

Arbitrary restrictions can be defined by using regular expressions. The regexp field type specifier introduces an ERE (extended regular expression) that will be matched against fields having that name. The synopsis is:

%typedef: type_name regexp /re/

where re is the regular expression to match.

For example, consider the Id_t type designed to represent the encoding of the identifier of ID cards in some country:

%typedef: Id_t regexp /[0-9]{9}[a-zA-Z]/

Examples of fields of type Id_t are:

IDCard: 123456789Z
IDCard: invalid id card

Note that the slashes delimiting the re can be replaced with any other character that is not itself used as part of the regexp. That is useful in some cases such as:

%typedef: Path_t regexp |(/[^/]/?)+|

The regexp flavor supported in recfiles are the POSIX EREs plus several GNU extensions. See Regular Expressions.