是否可以写一点不只有包含数字的所有字符串相匹配的正则表达式?如果我们有这些字符串:正则表达式:如何匹配一个字符串,它不仅是数字
- ABC
- A4C
- 4BC
- AB4
应该匹配ŧ他四个第一,但不是最后一个。我曾尝试摆弄周围在使用RegexBuddy与向前看符号之类的东西,但我似乎无法弄清楚。
是否可以写一点不只有包含数字的所有字符串相匹配的正则表达式?如果我们有这些字符串:正则表达式:如何匹配一个字符串,它不仅是数字
应该匹配ŧ他四个第一,但不是最后一个。我曾尝试摆弄周围在使用RegexBuddy与向前看符号之类的东西,但我似乎无法弄清楚。
(?!^\d+$)^.+$
这表示对于不包含所有数字并且与整条线匹配的行的向前看。
除非我失去了一些东西,我觉得最简洁的正则表达式是...
/\D/
...或者换句话说,有没有不位数的字符串中?
如果字符串中有一个数字,就会失败 – Svish 2010-10-01 09:56:19
@Svish:你的陈述没有意义。 – SilentGhost 2010-10-01 11:06:37
@Svish,也许你应该在说些什么之前真正尝试一下。它比您选择的答案简洁得多,而且确实有效。如果字符串中有数字,它不会失败,如果它找不到“非数字”,它就会失败,这正是你所要求的。 – 2010-10-01 13:47:11
既然你说 “比赛”,不仅验证,下面的正则表达式匹配正确
\b.*[a-zA-Z]+.*\b
通过的测试:
abc
a4c
4bc
ab4
1b1
11b
b11
失败的测试:
123
可以'\ b。* \ D +。* \ b'工作吗? – 2012-10-18 08:07:52
@Jin,取决于,'[a-zA-Z]'与'\ D'不一样。 '\ D'是“不是一个数字”。所以如果他们真的不想要0-9并且符合标点符号,那么是的,'\ D'会更准确。 – CaffGeek 2012-10-18 13:03:09
jjnguy在中正确(如果略有冗余)。
.*?[^0-9].*
@Chad,您正则表达式,
\b.*[a-zA-Z]+.*\b
也许应该允许非字母(如标点符号),即使Svish的例子并不包括一个。 Svish的主要要求是:并非所有人都是数字。
\b.*[^0-9]+.*\b
然后,你不需要+在那里,因为所有你需要的是保证1个非数字是在那里(更可能是在那里作为涵盖的。*的结束)。接下来,由于这些是不必要的约束(调用对alphanum和_的引用),因此您可以在两端删除\ b。
.*[^0-9].*
最后请注意,这最后的正则表达式显示问题只带有基本得到解决,那些已经存在了几十年基础(例如,无需先行功能)。在英语中,这个问题在逻辑上等同于简单地要求在一个字符串中找到1个反例字符。
我们可以在浏览器中测试这个正则表达式,方法是将以下内容复制到地址栏中,将字符串“6576576i7567”替换为您想测试的任何字符串。
javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));
如果我们想限制有效字符,使字符串可以从一组有限的字符进行,试试这个:
(?!^\d+$)^[a-zA-Z0-9_-]{3,}$
或
(?!^\d+$)^[\w-]{3,}$
/\ w + /: 匹配任何字母,数字或下划线。任何单词字符
试试这个:
/^.*\D+.*$/
,如果有任何辛博尔返回true,这不是一个数字。适用于所有语言。
,如果你想匹配至少有一个字母的世界,但它们是由数字和字母(或只是字母)形成的,这是我用什么:
(\d*[a-zA-Z]+\d*)+
这基本上是我结束了:) – Svish 2010-10-01 09:58:18
所以......基本上你想出了一个复杂的表达式/ \ D /。 – 2010-10-01 18:06:43
好吧,没有\ D与我的不同,因为它只匹配非数字。矿场返回包含整个字符串的匹配项,而只有\ D可能是每行多个匹配项。我的正则表达式返回4个匹配,而\ D返回17(对于每个非数字)。 – 2010-10-01 19:20:08