首页 文章

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

提问于
浏览
28

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

  • abc

  • a4c

  • 4bc

  • ab4

  • 123

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

11 回答

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

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

  • 0

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

    /\D/
    

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

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

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

  • 0

    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].*"));
    
  • 7

    试试这个:

    /^.*\D+.*$/
    

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

  • 2

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

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

    通过测试:

    abc
    a4c
    4bc
    ab4
    1b1
    11b
    b11
    

    测试失败:

    123
    
  • 10

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

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

    如果我们想限制有效字符以便字符串可以由一组有限的字符组成,请尝试以下方法:

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

    要么

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

    / \ w /:匹配任何字母,数字或下划线 . 任何单词字符

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

    对我们来说很好 .

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

    我在这里提供的那个很容易理解,很明显:开始和结束可能是任何字符,但是,但必须至少有一个非数字字符,这是最好的 .

  • 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));
    
  • 37

    我不得不在MySQL和以下内容中做类似的事情,而过度简化似乎对我有用:

    其中fieldname regexp ^[a-zA-Z0-9]+$ 和fieldname NOT REGEXP ^[0-9]+$

    这将显示所有字母和字母数字字段,但隐藏任何仅为数字的字段 . 这似乎有效 .

    例:

    name1 - 显示
    名称 - 显示
    name2 - 显示
    name3 - 显示
    name4 - 显示
    n4ame - 显示
    324234234 - 未显示

相关问题