使用正则表达式对象进行Javascript字符串验证

时间:2012-07-30 11:22:17

标签: javascript regex validation

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

2 个答案:

答案 0 :(得分:2)

根据你的问题,很难解读你之后的事情......但是让我尝试一下:

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

如果您只允许在开头或结尾(但不是在两侧)使用任意数字(至少一个)星号,例如:

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

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

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

匹配正面和背面的星号

如果您要求biginning的星号数与最后的星号数相匹配

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

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

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

结果

从您的问题中不清楚当每个正则表达式匹配时结果应该是什么?对您和您的要求是正确或错误地对正常表达式测试为正的字符串。只要你有正确的正则表达式,你就可以提供所需的功能。

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

  

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

答案 1 :(得分:1)

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

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

这与******* ***等字符串不匹配,但会匹配***d*** *d或您说的有效的所有示例(***tomatos等)。<如果我误解了,请告诉我,我会看到我能做些什么来帮助你。 PS:我们都在某个时候开始作为新手,没有什么值得羞耻的,更不用说道歉了。)

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

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

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

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

Here's一个方便的网站,可以帮助您在正则表达式的神奇世界中找到自己的方式。