我是regex和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!!!')
}

最佳答案

根据您的问题,很难理解您所追求的...但是让我尝试:

在开头或结尾只允许星号

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


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


然后使用此正则表达式:

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


匹配星号的正反数

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


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


然后使用以下正则表达式:

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


结果呢?

从您的问题尚不清楚,当每个正则表达式匹配时,结果应该是什么?测试对上述正则表达式的判断是否正确的字符串对您和您的要求是否正确。只要您有正确的正则表达式,就可以使用并提供所需的功能。

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


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

10-04 22:49