diff --git a/app/admin/views.py b/app/admin/views.py
index 8ab0a1609e3ae94e5c9c759600dd27a93efa55b1..96f75edbc879cb9832b7c7db5bb19ec79f488e94 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -13,8 +13,7 @@ from wtforms import validators, fields
 from flask_admin.contrib import sqla
 from flask_admin.model.form import converts
 from flask_login import current_user
-from ..validators import IPNetwork
-from ..models import ICS_ID_RE
+from ..validators import IPNetwork, ICS_ID_RE
 
 
 # Monkey patch flask-admin Unique validator to disable it
diff --git a/app/inventory/forms.py b/app/inventory/forms.py
index 90163beb2277f541ffabb7d9e6176e6e6ce96a0d..e07a02f04496f0af926736272c1eb4f2bbb65242 100644
--- a/app/inventory/forms.py
+++ b/app/inventory/forms.py
@@ -11,7 +11,7 @@ This module defines the inventory blueprint forms.
 """
 from wtforms import SelectField, StringField, TextAreaField, validators
 from ..helpers import CSEntryForm
-from ..validators import Unique, RegexpList, MAC_ADDRESS_RE
+from ..validators import Unique, RegexpList, ICS_ID_RE, MAC_ADDRESS_RE
 from .. import utils, models
 
 
@@ -22,7 +22,7 @@ class AttributeForm(CSEntryForm):
 class ItemForm(CSEntryForm):
     ics_id = StringField('ICS id',
                          validators=[validators.InputRequired(),
-                                     validators.Regexp(models.ICS_ID_RE),
+                                     validators.Regexp(ICS_ID_RE),
                                      Unique(models.Item, 'ics_id')])
     serial_number = StringField('Serial number',
                                 validators=[validators.InputRequired()])
diff --git a/app/models.py b/app/models.py
index c32d22e40da6417399c2b9062437d4ee58e05d6d..6577077d113e2433bef8dae27e6f29635c967694 100644
--- a/app/models.py
+++ b/app/models.py
@@ -10,7 +10,6 @@ This module implements the models used in the app.
 
 """
 import ipaddress
-import re
 import qrcode
 import sqlalchemy as sa
 from sqlalchemy.dialects import postgresql
@@ -23,12 +22,10 @@ from flask_login import UserMixin
 from wtforms import ValidationError
 from .extensions import db, login_manager, ldap_manager
 from .plugins import FlaskUserPlugin
+from .validators import ICS_ID_RE, HOST_NAME_RE, VLAN_NAME_RE
 from . import utils
 
 
-ICS_ID_RE = re.compile('[A-Z]{3}[0-9]{3}')
-HOST_NAME_RE = re.compile('^[a-z0-9\-]{2,20}$')
-VLAN_NAME_RE = re.compile('^[A-Za-z0-9\-]{3,25}$')
 make_versioned(plugins=[FlaskUserPlugin()])
 
 
diff --git a/app/network/forms.py b/app/network/forms.py
index c141eb3847e4217ef5ae5961c4b545728e37f9dc..7f563fec9add6daacb4b5cfa49d9662a877cdf61 100644
--- a/app/network/forms.py
+++ b/app/network/forms.py
@@ -13,7 +13,7 @@ from flask_login import current_user
 from wtforms import (SelectField, StringField, TextAreaField,
                      SelectMultipleField, BooleanField, validators)
 from ..helpers import CSEntryForm
-from ..validators import Unique
+from ..validators import Unique, HOST_NAME_RE, VLAN_NAME_RE
 from .. import utils, models
 
 
@@ -45,7 +45,7 @@ class NetworkForm(CSEntryForm):
     vlan_name = StringField('Vlan name',
                             description='hostname must be 3-25 characters long and contain only letters, numbers and dash',
                             validators=[validators.InputRequired(),
-                                        validators.Regexp(models.VLAN_NAME_RE),
+                                        validators.Regexp(VLAN_NAME_RE),
                                         Unique(models.Network, column='vlan_name')])
     vlan_id = NoValidateSelectField('Vlan id', choices=[])
     description = TextAreaField('Description')
@@ -64,7 +64,7 @@ class HostForm(CSEntryForm):
     name = StringField('Hostname',
                        description='hostname must be 2-20 characters long and contain only letters, numbers and dash',
                        validators=[validators.InputRequired(),
-                                   validators.Regexp(models.HOST_NAME_RE),
+                                   validators.Regexp(HOST_NAME_RE),
                                    Unique(models.Host)],
                        filters=[utils.lowercase_field])
     type = SelectField('Type', choices=utils.get_choices(('Virtual', 'Physical')))
@@ -86,7 +86,7 @@ class InterfaceForm(CSEntryForm):
         'Interface name',
         description='name must be 2-20 characters long and contain only letters, numbers and dash',
         validators=[validators.InputRequired(),
-                    validators.Regexp(models.HOST_NAME_RE),
+                    validators.Regexp(HOST_NAME_RE),
                     Unique(models.Interface)],
         filters=[utils.lowercase_field])
     mac_id = SelectField('MAC', coerce=utils.coerce_to_str_or_none)
diff --git a/app/validators.py b/app/validators.py
index 88f8f9ae7d48ace3b418224581249e8aee8a9a32..004543edbe2776d633c232b2c6ece09f73e742db 100644
--- a/app/validators.py
+++ b/app/validators.py
@@ -14,6 +14,9 @@ import re
 import sqlalchemy as sa
 from wtforms import ValidationError
 
+ICS_ID_RE = re.compile('[A-Z]{3}[0-9]{3}')
+HOST_NAME_RE = re.compile('^[a-z0-9\-]{2,20}$')
+VLAN_NAME_RE = re.compile('^[A-Za-z0-9\-]{3,25}$')
 MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')