1

我是正则表达式和 Javascript 的新手。我有以下问题:需要检查文本字段是否存在一 (1) 或多个 (n) 连续*(星号)字符/字符,例如。******或 无限 (n) *。允许使用字符串,例如。*tomatotomato***tomatotomato**或 作为many(n)*tomato many(n)*。所以,到目前为止,我已经尝试了以下方法:

var str = 'a string'
var value = encodeURIComponent(str);
var reg = /([^\s]\*)|(\*[^\s])/;

if (reg.test(value) == true ) {
    alert ('Watch out your asterisks!!!')
}
4

2 回答 2

2

通过你的问题很难破译你所追求的......但让我试试:

只允许在开头或结尾使用星号

如果您只在开头或结尾(但不能在两边)允许任意数量(至少一个)星号,例如:

  • *****tomato
  • tomato******
  • 但不是 **tomato*****

然后使用这个正则表达式:

reg = /^(?:\*+[^*]+|[^*]+\*+)$/;

匹配星号的前后数量

如果您要求 biginning 处的星号数量与末尾的星号数量相匹配,例如

  • *****tomato*****
  • *tomato*
  • 但不是 **tomato*****

然后使用这个正则表达式:

reg = /^(\*+)[^*]+\1$/;

结果?

从您的问题中不清楚当这些正则表达式中的每一个匹配时结果应该是什么?对上述正则表达式测试为阳性的字符串是好是坏取决于您和您的要求。只要您有正确的正则表达式,您就可以提供所需的功能。

我还编写了正则表达式来排除字符串中的星号。如果您还需要拒绝空格或其他任何内容,只需调整[^...]上述表达式的部分即可。

注意:这两个正则表达式都未经测试,但应该可以让您开始构建您实际需要并在代码中要求的表达式。

于 2012-07-30T11:40:14.793 回答
0

如果我理解正确,您正在寻找这样的模式:

var pattern = /\**[^\s*]+\**/;

这不会匹配像*****or之类的字符串** ***,但会匹配***d*** *d或您所说的所有示例都是有效的(***tomatos等)。
如果我误解了,请告诉我,我会看看我能做些什么来提供帮助。PS:我们都是从某个时候开始的新手,没什么好羞愧的,更不用说道歉了:)

在对您的问题进行编辑后,我收集到需要在输入的开头或结尾使用星号,但字符串还必须包含至少 1 个其他字符,因此我提出以下解决方案:

var pattern = /^\*+[^\s*]+|[^\s*]+\*+$/;
'****'.match(pattern);//false
' ***tomato**'.match(pattern);//true

但是,如果*tomato*不允许,则必须将正则表达式更改为:

var pattern = /^\*+[^\s*]+$|^[^\s*]+\*+$/;

这是一个方便的站点,可帮助您在正则表达式的神奇世界中找到自己的方式。

于 2012-07-30T11:30:08.663 回答