开发者

Regex: How to match a string that is not only numbers

Is it possible to write a regular expression that matches all strings that does not only contain numbers? If we have these strings:

  • abc
  • a4c
  • 4bc
  • ab4
  • 123

It should match the four first, but not the last one. I have tried fiddling around in RegexBuddy with lookahea开发者_如何学Cds and stuff, but I can't seem to figure it out.


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

This says lookahead for lines that do not contain all digits and match the entire line.


Unless I am missing something, I think the most concise regex is...

/\D/

...or in other words, is there a not-digit in the string?


jjnguy had it correct (if slightly redundant) in an earlier revision.

.*?[^0-9].*

@Chad, your regex,

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

should probably allow for non letters (eg, punctuation) even though Svish's examples didn't include one. Svish's primary requirement was: not all be digits.

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

Then, you don't need the + in there since all you need is to guarantee 1 non-digit is in there (more might be in there as covered by the .* on the ends).

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

Next, you can do away with the \b on either end since these are unnecessary constraints (invoking reference to alphanum and _).

.*[^0-9].*

Finally, note that this last regex shows that the problem can be solved with just the basics, those basics which have existed for decades (eg, no need for the look-ahead feature). In English, the question was logically equivalent to simply asking that 1 counter-example character be found within a string.

We can test this regex in a browser by copying the following into the location bar, replacing the string "6576576i7567" with whatever you want to test.

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


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

Or, case insensitive version:

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

May be a digit at the beginning, then at least one letter, then letters or digits


Try this:

/^.*\D+.*$/

It returns true if there is any simbol, that is not a number. Works fine with all languages.


Since you said "match", not just validate, the following regex will match correctly

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

Passing Tests:

abc
a4c
4bc
ab4
1b1
11b
b11

Failing Tests:

123


if you are trying to match worlds that have at least one letter but they are formed by numbers and letters (or just letters), this is what I have used:

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


If we want to restrict valid characters so that string can be made from a limited set of characters, try this:

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

or

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

/\w+/: Matches any letter, number or underscore. any word character


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

Works fine for us.

We want to use the used answer, but it's not working within YANG model.

And the one I provided here is easy to understand and it's clear: start and end could be any chars, but, but there must be at least one NON NUMERICAL characters, which is greatest.


I am using /^[0-9]*$/gm in my JavaScript code to see if string is only numbers. If yes then it should fail otherwise it will return the string.

Below is working code snippet with test cases:

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


I had to do something similar in MySQL and the following whilst over simplified seems to have worked for me:

where fieldname regexp ^[a-zA-Z0-9]+$ and fieldname NOT REGEXP ^[0-9]+$

This shows all fields that are alphabetical and alphanumeric but any fields that are just numeric are hidden. This seems to work.

example:

name1 - Displayed
name - Displayed
name2 - Displayed
name3 - Displayed
name4 - Displayed
n4ame - Displayed
324234234 - Not Displayed

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜