模式,以允许在2个字母数字之间使用可选的连字符并限制空格

时间:2018-06-27 13:12:27

标签: javascript regex

sub:模式,允许在2个字母数字之间的可选连字符,并且也限制了空格。没有其他特殊字符

我需要一个正则表达式来匹配以下测试用例:-

  

“全欠”“ allowe d”“ a-llo-wed-12”“ allowed12”“ allow-12ed”   “ allowed-12”“ allo-wed-12”

     

“不允许”“不允许”“不允许”“不允许”   “不允许-允许”“禁止@允许”

尝试的模式:

^[^-]*-?[^-]*$
^\\w+(-\\w+)*$

Regex to text a string which will have only numbers and an optional hyphen. Hyphen can be at any position after character 2

javascript regex for special characters

Java regex - alphanumeric, at most one hyphen, period or underscore, seven characters long

PHP regex to match alphanumeric and hyphens (not spaces) for use as subdomain

还有更多

请发布重复的问题链接。我们可能会从那里提供的解决方案中学习并改善搜索范围

2 个答案:

答案 0 :(得分:1)

您的第二个正则表达式^\w+(-\w+)*$将与您的情况匹配,但是\w也将与下划线匹配。

也许您正在寻找一种模式,该模式与字母数字[a-z0-9]+匹配一次或多次,然后重复与破折号匹配,然后与字母数字(?:-[a-z0-9]+)*匹配一次或多次

请注意,这仅匹配小写字符。您可以使用不区分大小写的标志来匹配大写和小写字符。

^[a-z0-9]+(?:-[a-z0-9]+)*$

const strings = [
  "all-owed",
  "allowe-d",
  "a-llo-wed-12",
  "allowed12",
  "allow-12ed",
  "allowed-12",
  "allo-wed-12",
  "notallo-wed-12_",
  "not allowed",
  "not allowed ",
  " notallowed",
  " nota-llowed",
  "not--allowed",
  "not@allowed"
];
let pattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;

strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});

答案 1 :(得分:0)

您可以使用正向查找和反向查找来确保-位于两个字母数字字符之间。

^((?<=\w)-(?=\w)|\w|\d)*$

Online demo