diff --git a/src/Hl7.Fhir.Specification.Tests/Validation/BasicValidationTests.cs b/src/Hl7.Fhir.Specification.Tests/Validation/BasicValidationTests.cs index 8409540a8e..bcf5664268 100644 --- a/src/Hl7.Fhir.Specification.Tests/Validation/BasicValidationTests.cs +++ b/src/Hl7.Fhir.Specification.Tests/Validation/BasicValidationTests.cs @@ -1259,7 +1259,13 @@ private static void assertElementConstraints(List patientElem } } - + [Fact] + public void ValidateNonBreakingWhitespaceInString() + { + var value = new FhirString("Non-breaking" + '\u00A0' + "space"); + var result = _validator.Validate(value); + Assert.True(result.Success); + } private class ClearSnapshotResolver : IResourceResolver { diff --git a/src/Hl7.Fhir.Specification/Validation/Validator.cs b/src/Hl7.Fhir.Specification/Validation/Validator.cs index bd0a6559db..6a55b4d06c 100644 --- a/src/Hl7.Fhir.Specification/Validation/Validator.cs +++ b/src/Hl7.Fhir.Specification/Validation/Validator.cs @@ -259,6 +259,12 @@ private OperationOutcome validateRegexExtension(IExtendable elementDef, ITypedEl var pattern = elementDef.GetStringExtension(uri); if (pattern != null) { + // See issue https://github.com/FirelyTeam/firely-net-sdk/issues/1563 and https://hl7.org/fhir/datatypes.html#string + // the regex provided by the Fhir standard is not sufficient enough. The regex [\r\n\t\u0020-\uFFFF]* is more recommended + if (instance?.InstanceType == FHIRAllTypes.String.GetLiteral() && pattern == @"[ \r\n\t\S]+") + { + pattern = @"[\r\n\t\u0020-\uFFFF]*"; + } var regex = new Regex(pattern); var value = toStringRepresentation(instance); var success = Regex.Match(value, "^" + regex + "$").Success;