Parul Ranjan
Parul Ranjan

Reputation: 61

How to add the option to allow only one space in a regex

I want a regex that will allow only one space within a set of characters. I have the below regex which doesn't accept space. The below regex only supports strings like

1. @alia 2. @ranbir 3. @shilpa

const regex = /@(\w+([a-z]|[A-Z]|[0-9]|[-]|[_]|[.]|['])*)$/g;

I want a regex that will allow strings like

1. @alia bhat 2. @ranbir kapoor 3. @shilpa shetty

Upvotes: 0

Views: 750

Answers (2)

Daniel Cruz
Daniel Cruz

Reputation: 2295

You can try something like this:

@([\w\-\.\']+(?:\s[\w\-\.\']+)?)$

Explanation: group all the chars in a single set (\w = a-zA-Z0-9_ + the rest of the chars)

then a next group would optionally match a single space followed by at least one character of the same set of characters, this means that your current single words will match and also two words but not if there is two spaces or just a single space at the end

Working example: https://regex101.com/r/czanzG/1

enter image description here

If you want to allow a single space after the name, then you just remove the \s from the group

@([\w\-\.\']+\s?(?:[\w\-\.\']+)?)$

https://regex101.com/r/IgROrF/1

enter image description here

Upvotes: 2

Rizal Ardhi Rahmadani
Rizal Ardhi Rahmadani

Reputation: 385

You can use regex alternative. First alternative is accepting the space and second is your original regex.

/@(\w+ \w+|\w+)/g

Updated

I forgot to put $ (regex the end of string) and include some characters .-'

/@([\w\-.']+ [\w\-.']+|[\w\-.']+)$/g

Example : https://regex101.com/r/LT7I1M/1

Upvotes: 0

Related Questions