diff --git a/app/inventory/forms.py b/app/inventory/forms.py
index 67773e0c3772f5f0beaf9c4c2c389369da28e956..90163beb2277f541ffabb7d9e6176e6e6ce96a0d 100644
--- a/app/inventory/forms.py
+++ b/app/inventory/forms.py
@@ -9,20 +9,11 @@ This module defines the inventory blueprint forms.
 :license: BSD 2-Clause, see LICENSE for more details.
 
 """
-import re
 from wtforms import SelectField, StringField, TextAreaField, validators
 from ..helpers import CSEntryForm
-from ..validators import Unique
+from ..validators import Unique, RegexpList, MAC_ADDRESS_RE
 from .. import utils, models
 
-MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')
-
-
-def check_mac_addresses_list(form, field):
-    for address in field.data.split():
-        if MAC_ADDRESS_RE.match(address) is None:
-            raise validators.ValidationError('Invalid Mac address')
-
 
 class AttributeForm(CSEntryForm):
     name = StringField('name', validators=[validators.DataRequired()])
@@ -43,7 +34,8 @@ class ItemForm(CSEntryForm):
     mac_addresses = StringField(
         'MAC addresses',
         description='space separated list of MAC addresses',
-        validators=[validators.Optional(), check_mac_addresses_list])
+        validators=[validators.Optional(),
+                    RegexpList(MAC_ADDRESS_RE, message='Invalid MAC address')])
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
diff --git a/app/validators.py b/app/validators.py
index 3beb4dbccc8b70b4e163d6bcc1b2ec65983eedff..88f8f9ae7d48ace3b418224581249e8aee8a9a32 100644
--- a/app/validators.py
+++ b/app/validators.py
@@ -10,9 +10,12 @@ This module defines extra field validators
 
 """
 import ipaddress
+import re
 import sqlalchemy as sa
 from wtforms import ValidationError
 
+MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')
+
 
 class IPNetwork:
     """Validates an IP network.
@@ -59,3 +62,21 @@ class Unique(object):
                 raise ValidationError(self.message)
         except sa.orm.exc.NoResultFound:
             pass
+
+
+class RegexpList:
+    """Validates a list of strings against a user provided regexp.
+
+    :param regex: the regular expression to use
+    :param message: the error message
+    """
+    def __init__(self, regex, message=None):
+        self.regex = regex
+        if message is None:
+            message = 'Invalid input.'
+        self.message = message
+
+    def __call__(self, form, field):
+        for string in field.data.split():
+            if self.regex.match(string) is None:
+                raise ValidationError(self.message)