正则表达式一次只允许一个特殊字符来自允许的特殊字符Javascript

时间:2017-04-10 13:52:23

标签: javascript regex

我想允许3个字符第1个下划线(_),第2个连字符( - )第3个点(。)

但是我想把所有条件一次只允许一个字符的条件,也只是一次。
e.g
允许用户名= abc.def,abc-def,abc_def
不允许usernames = abc.de.f alert here(用户名中只允许使用一个特殊字符)
不允许usernames = abc.de-f,abc.de_f,ab-cd_ef

我该怎么做。

2 个答案:

答案 0 :(得分:1)

尝试/^[a-z]*[-._]?[a-z]*$/

var tests = ['abc.def', 'abc-def', 'abc_def', 'abc.de.f','abc.de-f' , 'abc.de_f', 'ab-cd_ef'];
$.each(tests, function(a,b) {
  $('body').append('<div>' + b + ' = ' + regIt(b) + '</div>');
});

function regIt(str) {
  return /^[a-z]*[-._]?[a-z]*$/.test(str);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

答案 1 :(得分:0)

^[a-z]*([-._]?)(?:[a-z]|\1)*$

此正则表达式将匹配字母,直到它到达字符串的末尾。如果它到达符号(- ._),它将该符号存储为组1,并保持字母或相同符号的匹配,直到字符串结束。

以下是匹配的示例:

  • 一个空字符串
  • _something
  • something-something
  • foo_bar_baz
  • foo.

这里有一些无效的字符串:

  • my_file.txt
  • alpha.bravo_charlie
  • not-working_