128 lines
5.0 KiB
Perl
128 lines
5.0 KiB
Perl
|
# -*- indent-tabs-mode: nil; -*-
|
||
|
# vim:ft=perl:et:sw=4
|
||
|
|
||
|
# Sympa - SYsteme de Multi-Postage Automatique
|
||
|
#
|
||
|
# Copyright (c) 1997, 1998, 1999 Institut Pasteur & Christophe Wolfhugel
|
||
|
# Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||
|
# 2006, 2007, 2008, 2009, 2010, 2011 Comite Reseau des Universites
|
||
|
# Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017 GIP RENATER
|
||
|
# Copyright 2017, 2021, 2022, 2023 The Sympa Community. See the
|
||
|
# AUTHORS.md file at the top-level directory of this distribution and at
|
||
|
# <https://github.com/sympa-community/sympa.git>.
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
package Sympa::Regexps;
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
|
||
|
# domain name.
|
||
|
use constant domain => qr'[-\w]+(?:[.][-\w]+)+';
|
||
|
|
||
|
# These are relaxed variants of the syntax for mailbox described in RFC 5322.
|
||
|
# See also RFC 5322, 3.2.3 & 3.4.1 for details on format.
|
||
|
use constant email =>
|
||
|
qr{(?:[A-Za-z0-9!\#\$%\&'*+\-/=?^_`{|}~.]+|"(?:\\.|[^\\"])*")\@[-\w]+(?:[.][-\w]+)+};
|
||
|
|
||
|
# This is older definition used by 6.2.65b and earlier.
|
||
|
#use constant addrspec => qr{(?:[-&+'./\w=]+|".*")\@[-\w]+(?:[.][-\w]+)+};
|
||
|
|
||
|
# This is the same as above except that it gave some groups, then regexp
|
||
|
# using it should also be changed. By this reason it has been deprecated.
|
||
|
#use constant email => qr'([\w\-\_\.\/\+\=\'\&]+|\".*\")\@[\w\-]+(\.[\w\-]+)+';
|
||
|
|
||
|
use constant family_name => qr'[a-z0-9][a-z0-9\-\.\+_]*';
|
||
|
## Allow \s for template names
|
||
|
use constant template_name => qr'[a-zA-Z0-9][a-zA-Z0-9\-\.\+_\s]*';
|
||
|
#FIXME: Not matching with IPv6 address.
|
||
|
use constant host => qr'[\w\.\-]+';
|
||
|
use constant hostport => qr{(?:
|
||
|
[-.\w]+ (?::\d+)?
|
||
|
| [:0-9a-f]*:[:0-9a-f]*:[:0-9a-f]*
|
||
|
| \[ [:0-9a-f]*:[:0-9a-f]*:[:0-9a-f]* \] (?::\d+)?
|
||
|
)}ix;
|
||
|
use constant html_date =>
|
||
|
qr'[0-9]{4}[0-9]*-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])';
|
||
|
use constant ipv6 => qr'[:0-9a-f]*:[:0-9a-f]*:[:0-9a-f]*'i;
|
||
|
#FIXME: Cannot contain IPv6 address.
|
||
|
use constant multiple_host_with_port =>
|
||
|
'[\w\.\-]+(:\d+)?(,[\w\.\-]+(:\d+)?)*';
|
||
|
#FIXME: Cannot contain IPv6 address.
|
||
|
use constant multiple_host_or_url =>
|
||
|
qr'([-\w]+://.+|[-.\w]+(:\d+)?)(,([-\w]+://.+|[-.\w]+(:\d+)?))*';
|
||
|
use constant listname => qr'[a-z0-9][a-z0-9\-\.\+_]*';
|
||
|
|
||
|
use constant ldap_attrdesc => qr'\w[-\w]*(?:;[-\w]+)*'; # RFC2251, 4.1.5
|
||
|
|
||
|
# "value" defined in RFC 2045, 5.1.
|
||
|
use constant rfc2045_parameter_value =>
|
||
|
qr'[^\s\x00-\x1F\x7F-\xFF()<>\@,;:\\/\[\]?=\"]+';
|
||
|
|
||
|
use constant sql_query => qr'(SELECT|select).*';
|
||
|
|
||
|
# "scenario" was deprecated. Use "scenario_name".
|
||
|
# "scenario_config" is used for compatibility to earlier list config files.
|
||
|
use constant scenario_config => qr'[-.,\w]+';
|
||
|
use constant scenario_name => qr'[-.\w]+';
|
||
|
|
||
|
use constant task => qr'\w+';
|
||
|
use constant datasource => qr'[\w-]+';
|
||
|
use constant uid => qr'[\w\-\.\+]+';
|
||
|
use constant time => qr'[012]?[0-9](?:\:[0-5][0-9])?';
|
||
|
use constant time_range => __PACKAGE__->time . '-' . __PACKAGE__->time;
|
||
|
use constant time_ranges => time_range() . '(?:\s+' . time_range() . ')*';
|
||
|
|
||
|
use constant re => qr{
|
||
|
(?:
|
||
|
Antw # Dutch
|
||
|
| ATB # Welsh
|
||
|
| ATB \. # Latvian
|
||
|
| AW # German
|
||
|
| Odp # Polish
|
||
|
| R # Italian
|
||
|
| Re (?: \s* \( \d+ \) | \s* \[ \d+ \] | \*{1,2} \d+ | \^ \d+ )?
|
||
|
| REF # French
|
||
|
| RES # Portuguese
|
||
|
| Rif # Italian
|
||
|
| SV # Scandinavian
|
||
|
| V\x{00E1} # Magyar, "VA"
|
||
|
| VS # Finnish
|
||
|
| YNT # Turkish
|
||
|
| \x{05D4}\x{05E9}\x{05D1} # Hebrew, "hashev"
|
||
|
| \x{0391}\x{03A0} # Greek, "AP"
|
||
|
| \x{03A3}\x{03A7}\x{0395}\x{03A4} # Greek, "SChET"
|
||
|
| \x{041D}\x{0410} # some Slavic in Cyrillic, "na"
|
||
|
| \x{56DE}\x{590D} # Simp. Chinese, "huifu"
|
||
|
| \x{56DE}\x{8986} # Trad. Chinese, "huifu"
|
||
|
)
|
||
|
\s* [:\x{FF1A}]
|
||
|
}ix;
|
||
|
|
||
|
1;
|
||
|
|
||
|
__END__
|
||
|
|
||
|
=encoding utf-8
|
||
|
|
||
|
=head1 NAME
|
||
|
|
||
|
Sympa::Regexps - Definition of regular expressions
|
||
|
|
||
|
=head1 DESCRIPTION
|
||
|
|
||
|
This module keeps definition of regular expressions used by Sympa software.
|
||
|
|
||
|
=cut
|