正则表达式:如何匹配不仅是数字的字符串

时间:2010-09-30 13:39:06

标签: regex

是否可以编写一个匹配所有包含数字的字符串的正则表达式?如果我们有这些字符串:

  • ABC
  • A4C
  • 4BC
  • AB4
  • 123

它应该匹配前四个,但不是最后一个。我试图在RegexBuddy中使用前瞻和东西来摆弄,但我似乎无法弄明白。

11 个答案:

答案 0 :(得分:39)

(?!^\d+$)^.+$

这表示不包含所有数字且与整行匹配的行的前瞻。

答案 1 :(得分:10)

除非我遗漏了什么,否则我认为最简洁的正则表达式是......

/\D/

...或换句话说,字符串中是否有非数字?

答案 2 :(得分:7)

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

可以是开头的数字,然后至少一个字母,然后是字母或数字

答案 3 :(得分:7)

jjnguy在earlier revision中将其更正(如果稍微多余)。

.*?[^0-9].*

@Chad,你的正则表达式,

\b.*[a-zA-Z]+.*\b

应该允许非字母(例如,标点符号),即使Svish的例子不包括一个。 Svish的主要要求是:并非所有都是数字。

\b.*[^0-9]+.*\b

然后,你不需要+,因为所有你需要的是保证在那里有一个非数字(更多可能在那里,由两端的。*覆盖)。

\b.*[^0-9].*\b

接下来,您可以取消两端的\ b,因为这些是不必要的约束(调用对alphanum和_的引用)。

.*[^0-9].*

最后,请注意,最后一个正则表达式表明问题可以通过基础知识解决,这些基础知识已存在数十年(例如,不需要预见功能)。在英语中,问题在逻辑上等同于简单地要求在字符串中找到1个反例例字符。

我们可以在浏览器中测试此正则表达式,方法是将以下内容复制到位置栏中,将字符串“6576576i7567”替换为您要测试的内容。

javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));

答案 4 :(得分:4)

试试这个:

/^.*\D+.*$/

如果有任何simbol,则返回true,这不是数字。适用于所有语言。

答案 5 :(得分:3)

由于您说“匹配”,而不仅仅是验证,以下正则表达式将正确匹配

\b.*[a-zA-Z]+.*\b

通过测试:

abc
a4c
4bc
ab4
1b1
11b
b11

测试失败:

123

答案 6 :(得分:2)

如果你想匹配至少有一个字母的世界,但它们是由数字和字母(或只是字母)组成的,那就是我用过的:

(\d*[a-zA-Z]+\d*)+

答案 7 :(得分:0)

如果我们想限制有效字符,以便可以从一组有限的字符中创建字符串,请尝试以下操作:

(?!^\d+$)^[a-zA-Z0-9_-]{3,}$

(?!^\d+$)^[\w-]{3,}$

/ \ W + /: 匹配任何字母,数字或下划线。任何单词字符

答案 8 :(得分:0)

.*[^0-9]{1,}.*

适合我们。

我们想要使用已使用的答案,但它在YANG模型中不起作用。

我在这里提供的那个很容易理解,而且很清楚: start和end可以是任何字符,但是,但必须至少有一个非数字字符,这是最好的。

答案 9 :(得分:0)

我在JavaScript代码中使用/^[0-9]*$/gm来查看字符串是否只是数字。如果是,那么它应该失败,否则它将返回字符串。

以下是包含测试用例的工作代码段:

function isValidURL(string) {
  var res = string.match(/^[0-9]*$/gm);
  if (res == null)
    return string;
  else
    return "fail";
};

var testCase1 = "abc";
console.log(isValidURL(testCase1)); // abc

var testCase2 = "a4c";
console.log(isValidURL(testCase2)); // a4c

var testCase3 = "4bc";
console.log(isValidURL(testCase3)); // 4bc

var testCase4 = "ab4";
console.log(isValidURL(testCase4)); // ab4

var testCase5 = "123"; // fail here
console.log(isValidURL(testCase5));

答案 10 :(得分:0)

我必须在MySQL中做类似的事情,而以下内容对我来说似乎很简单:

其中,字段名regexp ^[a-zA-Z0-9]+$ 和字段名NOT REGEXP ^[0-9]+$

这将显示所有字母和字母数字字段,但任何数字字段均被隐藏。这似乎可行。

示例:

名称1-显示
名称-显示的
name2-显示
name3-显示
name4-显示
n4ame-显示
324234234-未显示