考虑以下正则表达式:
^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$
我确实在https://regexr.com/上使用测试Collection '98
和匹配项进行了尝试。
然后我确实在Node.js中实现了它:
const myRegex = '^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$';
const name = 'Collection \'98';
if (!name.match(myRegex))
console.log('NOK');
else
console.log('OK');
但是,它始终会打印NOK
。
为什么验证无法通过应用程序进行?
答案 0 :(得分:1)
将正则表达式放在斜杠(/
)之间,而不要用引号"
括起来:
const myRegex = /^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$/;
const name = 'Collection \'98';
if (!name.match(myRegex))
console.log('NOK');
else
console.log('OK');
答案 1 :(得分:1)
我不确定您的代码,但是在我看来您的表达是正确的并且可以正常工作。
此代码段表明它将返回一个匹配项。
const regex = /[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}/gm;
const str = `Collection '98`;
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}`);
});
}
您可以在this link中测试/修改您的表达式。
似乎您可能已经忘记在两个正斜杠之间添加表达式了,您可以使用/expression/
对其进行简单修复。