用javascript RegEX验证文本



我试图用javascript验证文本,但可以找出为什么它不工作。

我一直在使用:https://regex101.com/测试它在哪里工作,但在我的脚本它失败

var check = "test"
var pattern = new RegExp('^(?!.)[a-zA-Z0-9._-]+$(?<!.)','gmi');
if (!pattern.test(check)) validate_check = false;else validate_check = true;

我要找的是第一个和最后一个字符不是点,字符串可能包含[a- za - z0 -9._-]

但是上面的检查总是失败,即使在:test

这个词上

+$(?<!.)在您的RegEx中无效

  1. $将匹配文本或行尾(带有m标志)
  2. 负向后看→(?<!Y)X将匹配X,但仅当Y而不是时在

更简单的正则表达式呢?

var checks = ["test", "1-t.e_s.t0", ".test", "test.", ".test."];
checks.forEach(check => {
var pattern = new RegExp('^[^.][a-zA-Z0-9._-]+[^.]$','gmi');
console.log(check, pattern.test(check))
});

你的代码应该是这样的:

var check = "test";
var pattern = new RegExp('^[^.][a-zA-Z0-9._-]+[^.]$','gmi');
var validate_check = pattern.test(check);
console.log(validate_check);

关于模式的几点注意事项:

  • 您正在使用RegExp构造函数,您必须对反斜杠进行双转义。在这种情况下,只有一个反斜杠,模式是^(?!.)[a-zA-Z0-9._-]+$(?<!.),如果右边有一个换行符以外的字符,第一个负向前看将使模式失败,这就是为什么它不匹配test
  • 如果您使用/i标志来进行不区分大小写的匹配,您可以将[A-Za-z]缩短为[a-z]的范围之一,或者使用w来匹配单词字符,如字符类
  • 这部分(?<!.)使用负向后看在您的模式中不是无效的,但并不总是支持

对于您的需求,您不必使用查找。如果您还希望允许使用单个字符,则可以使用:

^[w-]+(?:[w.-]*[w-])?$
  • ^起始字符串
  • [w-]+匹配1+个单词字符或-
  • (?:非捕获组
    • [w.-]*[w-]匹配可选的字字符,点或连字符
  • )?关闭非捕获组并使其为可选
  • $字符串结束

Regex演示

const regex = /^[w-]+(?:[w.-]*[w-])?$/;
["test", "abc....abc", "a", ".test", "test."]
.forEach((s) =>
console.log(`${s} --> ${regex.test(s)}`)
);

相关内容

  • 没有找到相关文章

最新更新