-5

任何人都可以建议什么是字符串的正则表达式,它验证以下条件:

  1. 可以包含字符 az 或 AZ。至少应该有一个。
  2. 可以包含(空格)、'(撇号)、-(连字符)、.(点)

除此集合之外的任何内容,例如特殊字符或数字或其他任何内容,都将是无效字符。

4

2 回答 2

4

像这样的东西应该工作

 /^[a-zA-Z' \.\-]*[a-zA-Z]+[a-zA-Z' \.\-]*$/

这意味着“至少一个字母被零个或多个任何有效字符包围”。

于 2013-06-28T13:23:44.030 回答
1

我通常不回答给我代码的问题,但嘿,今天是星期五!

遵循相同的模式,这里可能有数千个关于 SO 的问题:

Plz help me with a regular expression for a string that
- _must_ contain at least one X
- _can_ contain Y

答案通常是这样的

/^ Y* X [XY]* $/

或者如果你喜欢

/^ (?=.*X) [XY]+ $

不幸的是,所有这些答案(或者更确切地说,这些问题)都是错误的。像往常一样,问题在于规范不正确 - 提问者采用了一些“好”的例子并在问题中描述它们,但没有意识到这种描述也与许多“坏”的情况相匹配。从字面上看,这个问题将用一个只完成一半工作的表达式来回答——是的,它确实验证了好案例,但它不会拒绝坏案例。一个好的表达必须两全其美!

示例:我想验证一个电话号码,类似于123or 123-456-789。所以我在SO上发布了一个问题:

Plz help me with a regular expression:
- must contain at least one digit
- can contain a dash

几秒钟后我得到

/^-*\d[\d-]*$/

我用我的例子测试(有效!)并插入我的代码。第二天早上,让我最尴尬的是,有人在我的网站上注册,提供了这个“电话号码”:

----------3-----------

故事的寓意:永远不要验证“字符串”。验证域对象!

要回答这个具体问题:在您告诉我它的用途之前,我无法为您提供一个好的正则表达式。

于 2013-06-28T14:18:20.240 回答