ValidationUtil.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const SPACE_REGEX = /\s/;
  2. // for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar
  3. const QNAME_REGEX = /^([a-z][\w-.]*:)?[a-z_][\w-.]*$/i;
  4. // for ID validation as per BPMN Schema (QName - Namespace)
  5. const ID_REGEX = /^[a-z_][\w-.]*$/i;
  6. /**
  7. * checks whether the id value is valid
  8. *
  9. * @param {ModdleElement} element
  10. * @param {String} idValue
  11. * @param {Function} translate
  12. *
  13. * @return {String} error message
  14. */
  15. export function isIdValid(element, idValue, translate) {
  16. const assigned = element.$model.ids.assigned(idValue);
  17. const idAlreadyExists = assigned && assigned !== element;
  18. if (!idValue) {
  19. return translate('ID must not be empty.');
  20. }
  21. if (idAlreadyExists) {
  22. return translate('ID must be unique.');
  23. }
  24. return validateId(idValue, translate);
  25. }
  26. export function validateId(idValue, translate) {
  27. if (containsSpace(idValue)) {
  28. return translate('ID must not contain spaces.');
  29. }
  30. if (!ID_REGEX.test(idValue)) {
  31. if (QNAME_REGEX.test(idValue)) {
  32. return translate('ID must not contain prefix.');
  33. }
  34. return translate('ID must be a valid QName.');
  35. }
  36. }
  37. export function containsSpace(value) {
  38. return SPACE_REGEX.test(value);
  39. }