2011-04-14 293 views
2

我尝试使用JavaScript编写一个正则表达式,将不允许非字母字符以下.,!-只允许某些非字母字符在正则表达式

这是什么只有一个发生的例外,我正在尝试,但似乎没有工作。

/^[ 0-9a-zA-Zs][,.!]{1,}+$/ 

任何帮助,将不胜感激。

以下是一些用于进一步说明的示例。如果用户键入以下内容:

  • 这是测试! (通)
  • 这是测试! (失败)
  • 这是一个 - 试验(通过)
  • 这是一个测试(合格)
  • 这是一个,测试(合格)
  • 这是,,测试(失败)
  • 这是一个测试? (通)
  • 这是一个测试? (失败)
  • $ 7500(失败)
  • 7500(通过)
+0

尝试http://refiddle.com构建您的表达式,您可以编写一个应该匹配的值列表,然后突出显示它应该匹配的时间以及不匹配的时间。帮助调整复杂的正则表达式。 – 2011-04-14 22:56:32

+0

例如http://refiddle.com/10j – 2011-04-14 22:58:10

回答

1
/^[\w ]+([.,!-?][\w ]*)?$/ 

实施例和试验在http://refiddle.com/10j

#+ Valid values 
allow.periods 
allow!bangs 
allow-dashes 
allow,commas 
alphaonly 
3numeric 
This is a test! 
This is a - test 
This is a test. 
This is a, test 
This is a test? 
7,500 

#- Invalid values 
no^ 
--- 
! 
!! 
two..periods 
This is test!! 
This is a,,test 
This is a test?? 
$7,500 
+0

已更新以匹配OP附加测试用例。 – 2011-04-15 17:24:10

+0

感谢您的帮助。您的解决方案奏效我很欣赏链接到refiddle – Rob 2011-04-15 17:47:33

+0

超级,很高兴成为帮助。 – 2011-04-15 18:07:05

1

试试这个:

/^[0-9a-zA-Z]*[,.!]?[0-9a-zA-Z]*$/ 

唯一的问题是,它会匹配,本身。您需要决定是否允许a,,a和,所有这些符合您原始标准的字面意思,但可能不是您的意思。

下面是zobgib建议的第一部分和最后部分的扩展。

/^([0-9a-zA-Z]+[,.!]?[0-9a-zA-Z]*)|([0-9a-zA-Z]*[,.!]?[0-9a-zA-Z]+)$/ 
+0

这只是错误的,你需要扩展到第一个和最后一个或者是 – austinbv 2011-04-14 22:55:08

+0

请参阅我的编辑。如果你想在字符串中至少有一个字母数字,那么你是正确的,你需要第一个和最后一个或者是。如果不是,那么当前的解决方案就可以工另外,原作者可能希望字符串以字母数字开头。在这种情况下,将第一个*改为加号会给出所需的行为。 – Zeki 2011-04-14 22:59:35

+0

'^(..)|(..)$'是错误的。它需要'^(..)$ | ^(..)$'或'^((..)|(..))$'。 – ridgerunner 2011-04-15 18:02:35

0

/^[^.,!-]+[.,!-]?[^.,!-]+?$/

其分解任何未.,!-之后也许后面说不定什么的.,!-一个不是.,!-

/^[a-zA-Z0-9]+[.,!-]?[a-zA-Z0-9]+?$/

这将匹配任何字母发生以下一次的字符

+0

这会匹配很多东西。例如###或+++。 – Zeki 2011-04-14 22:56:06

+0

@zeki编辑为你想要的 – austinbv 2011-04-14 22:58:58

+0

感谢您的努力。我无法获得您发布的工作。让我试着解释一下。 所以这个想法是,他们只能在alpha字符串中有下列之一。 !,?&。-_ sting中的任何其他非alpha字符都会失败。如果字符串中出现多个字符!,?&。-_或任何其他非字母字符都会失败,那么它们在字符串中出现的位置并不重要。 – Rob 2011-04-15 16:07:39

0
/^[0-9a-zA-Z]+[,.!]?[0-9a-zA-Z]+$/ 

必须包含前一个字符和一个可能的非字母字符之后。

应该匹配,一但不是一个,或者一个....

或者你可以更改为+ *允许0或以上次数。

/^[0-9a-zA-Z]+[,.!]?[0-9a-zA-Z]*$/ 

这会匹配你好!但不是!helooo

你也可以使用这种小抄这里http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/

作弊表,你甚至可以用

/^[:alnum:]+[,.!]?[:alnum:]*$/ 

脱身,但可能是特定的语言。

0
/^([,.!-]|[0-9a-zA-Z]+[,.!-])[0-9a-zA-Z]*$/ 

这将匹配你的异常的一个或 任意数量alphanums其次是一个例外, ,要么匹配后跟零个或多个alphanums的。

相关问题