正则表达式,应该只包含一个星号(*)

时间:2016-04-18 13:02:51

标签: javascript regex

字符串可以包含任何内容,但字符串中必须包含一个星号(<class 'sympy.core.add.Add'>),并且星号可以位于字符串中的任何位置。

此外,字符串不应包含任何空格。

以下是有效字符串:

*

以下是无效字符串:

test*
*_test
test*something

有人请帮我写上述场景的正则表达式。

4 个答案:

答案 0 :(得分:3)

使用此RegEx:

^(?!(.*?\*){2,}|.*? |\*$).*?\*.*$

Live Demo on Regex101

如果您希望它允许标签(所有其他空格),请使用\s而不是文字空格):

^(?!(.*?\*){2,}|.*?\s|\*$).*?\*.*$

工作原理:

^          # String starts with ...
(?!        # DO NOT match if ...
  (.*?\*)    # Optional Data followed by a *
  {2,}       # Multiple times (multiple *s)
  |          # OR
  .*?\s      # Optional Data followed by whitespace
  |          # OR
  \*$        # * then the end of the string (i.e. whole string is just a *)
)
.*?        # Optional Data before *
\*         # *
.*         # Optional Data after *
$          # ... String ends with

演示:

&#13;
&#13;
strings = [
  'test*',
  '*_test',
  'test*something',
  'test',
  '*',
  'test_**',
  '**_test',
  'test*something*',
  'test *something',
  'test *'
]

for (var i = 0; i < strings.length; i++) {
  if (strings[i].match(/^(?!(.*?\*){2,}|.*?\s|\*$).*?\*.*$/)) {
    document.write(strings[i] + '<br>')
  }
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用/^[^*\s]*\*[^*\s]*$/来检查字符串,其中只包含一个星号且没有空格。如果只有一个星号无效,则应添加前瞻以检查是否存在两个字符,例如/^(?=.{2})[^*\s]*\*[^*\s]*$/

有些样本请参阅https://regex101.com/r/yE5zV2/1(进入单元测试)

答案 2 :(得分:0)

您可以使用:

var regex = /^([^ \*]|\s)*\*{1}([^ \*]|\s)*$/

var str1 = '*abcfkdsjfksdjf';
var str2 = 'abcfkds*jfksdjf';
var str3 = 'abcfkdsjfksdjf*';
var str4 = 'abcfkdsjfksdjf';
var str5 = 'abcf*kdsjfk*sdjf';



console.log(regex.test(str1)); // returns true;
console.log(regex.test(str2)); // returns true;
console.log(regex.test(str3)); // returns true;
console.log(regex.test(str4)); // returns false;
console.log(regex.test(str5)); // returns false;

答案 3 :(得分:0)

这些条件几乎不需要任何正则表达式(虽然检查空格时很好用)。

// This is the checking function
function checkStr(x) {
  return (x.indexOf("*", x.indexOf("*")+1) === -1 && x.indexOf("*") > -1 && !/\s/.test(x));
}
// And this is the demo code
var valid = ["123*567", "*hereandthere", "noidea*"];
var invalid = ["123*567*", "*here and there", "noidea**", "kkkk"];
valid.map(x => document.body.innerHTML += "<b>" + x + "</b>: " + checkStr(x) + "<br/><b>");
invalid.map(x => document.body.innerHTML += "<b>" + x + "</b>: " + checkStr(x) + "<br/><b>");

POI为return (x.indexOf("*", x.indexOf("*")+1) === -1 && x.indexOf("*") > -1 && !/\s/.test(x));

  • x.indexOf("*", x.indexOf("*")+1) === -1 - 确保没有2个星号
  • x.indexOf("*") > -1 - 确保至少有一个*
  • !/\s/.test(x) - 确保字符串中没有空格。