正则表达式用于匹配不是以数字传递字母数字开头的字符串

RegEx for matching strings not started with a number passing alphanumeric

我正在寻找一个只接受数字和字母并且第一个字符不能以数字开头的正则表达式。

我找到了一个行之有效的解决方案,但它并不总是有效:

export const cannotBeginWithAdigit= new RegExp("/^d/");
export const canOnlyContainNumsbersAndDigits = new RegExp('/[,"/\[]:|<>+=.;?*]/g');

我将正则表达式放在 || 之间测试第一个,然后测试第二个。

其他不行的:

^d{1}[0-9a-zA-Z]

尝试/^\D{1}\w+$/

解释:

\D 表示 select 仅非数字,{1} 将匹配限制为单个字母。 \w 是单词匹配,它匹配所有字母数字,但不匹配其他字符。 + 以确保 \w 匹配中有多个字母。您可以修改它以满足您的要求。

在这里,我们可以用 not-start-with 数字 ([^\d]) 开始 (^) 我们的表达式,然后是我们想要的字符列表:

^[^\d][A-Za-z0-9]+

DEMO

然后,我们还可以添加额外的边界。例如,anubhava 在评论中的建议是添加一个结束字符并使用 i 标志:

/^[a-z][a-z\d]*$/i

测试

const regex = /^[^\d][A-Za-z0-9]+/gm;
const str = `123abc
abc123abc
`;
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}`);
    });
}

正则表达式电路

jex.im 可视化正则表达式。