## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# 7.6. Validating URNs

## Problem

You want to check whether a string represents a valid Uniform Resource Name (URN), as specified in RFC 2141, or find URNs in a larger body of text.

## Solution

Check whether a string consists entirely of a valid URN:

```\Aurn:
# Namespace Identifier
[a-z0-9][a-z0-9-]{0,31}:
# Namespace Specific String
[a-z0-9()+,\-.:=@;\$_!*'%/?#]+
\Z```
 Regex options: Free-spacing, case insensitive Regex flavors: .NET, Java, PCRE, Perl, Python, Ruby
`^urn:[a-z0-9][a-z0-9-]{0,31}:[a-z0-9()+,\-.:=@;\$_!*'%/?#]+\$`
 Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python

Find a URN in a larger body of text:

```\burn:
# Namespace Identifier
[a-z0-9][a-z0-9-]{0,31}:
# Namespace Specific String
[a-z0-9()+,\-.:=@;\$_!*'%/?#]+```
 Regex options: Free-spacing, case insensitive Regex flavors: .NET, Java, PCRE, Perl, Python, Ruby
`\burn:[a-z0-9][a-z0-9-]{0,31}:[a-z0-9()+,\-.:=@;\$_!*'%/?#]+`
 Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Find a URN in a larger body of text, assuming that punctuation at the end of the URN is part of the (English) text in which the URN is quoted rather than part of the URN itself:

```\burn:
# Namespace Identifier
[a-z0-9][a-z0-9-]{0,31}:
# Namespace Specific String
[a-z0-9()+,\-.:=@;\$_!*'%/?#]*[a-z0-9+=@\$/]```
 Regex options: Free-spacing, case insensitive Regex flavors: .NET, Java, PCRE, Perl, Python, Ruby
`\burn:[a-z0-9][a-z0-9-]{0,31}:[a-z0-9()+,\-.:=@;\$_!*'%/?#]*[a-z0-9+=@\$/]`
 Regex options: Case insensitive Regex flavors: ...

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required