RegEx для прохождения пробела и одинарные кавычки - PullRequest
0 голосов
/ 29 мая 2019

Я довольно новичок в RegEx и у меня возникли некоторые проблемы с тем, чтобы мой RegEx делал то, что мне хотелось бы.Я пытаюсь создать RegEx, который предотвращает любые специальные символы, кроме одинарных кавычек ('), тире (-) и точки (.).RegEx должен разрешать пробелы и пустые строки.

Что у меня сейчас есть:

^[a-zA-Z0-9-.]*$

Что мне нужно добавить, чтобы заставить его работать, например, имя «Кевин О'Лири»?

Я попытался разрешить пробелы, добавив \ s, но он сломал другие части моего RegEx.

^[a-zA-Z0-9-.]*$

Ожидается: разрешить имена, такие как Кевин О'Лири. Факт: неразрешить имена вроде Кевина О'Лири

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Просто добавьте кавычку и пробел в диапазон символов:

^[ a-zA-Z0-9'.-]*$

Пробел может быть просто буквальным пробелом в шаблоне.Кроме того, вам нужно иметь - как последний символ, потому что он имеет особое значение в диапазонах.

regex101 demo

0 голосов
/ 29 мая 2019

Вы можете использовать флаг i и использовать это выражение:

^[a-z0-9'-.\s]+$

, где \x27 - это ', а \s - это пробел.

const regex = /^[a-z0-9'-.\s]+$/gmi;
const str = `Kevin O'Leary`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

DEMO

RegEx

Если это выражение не требуется, его можно изменить или изменить в regex101.com .

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

...