正则表达式,用于传递空格和单引号

时间:2019-05-28 21:03:47

标签: javascript regex string regex-greedy

我对RegEx来说还很陌生,并且遇到了一些问题,使我的RegEx可以做我想做的事情。我试图创建一个RegEx,以防止除单引号('),破折号(-)和点号(。)以外的任何特殊字符。 正则表达式需要允许空格和空字符串。

我现在拥有的是:

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

我需要添加什么才能使其生效,例如名称“ Kevin O'Leary”?

我试图通过添加\ s来允许空格,但它破坏了RegEx的其他部分。

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

预期:应允许像Kevin O'Leary这样的名字 实际:不允许像凯文·奥利里这样的名字

2 个答案:

答案 0 :(得分:1)

只需在字符范围内添加引号和空格:

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

该空间可以只是模式中的文字空间。另外,您需要将-作为最后一个符号,因为它在范围内具有特殊含义。

regex101 demo

答案 1 :(得分:0)

您可以使用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