Regex: Как сопоставить строку, которая не только числа - PullRequest
29 голосов
/ 30 сентября 2010

Можно ли написать регулярное выражение, которое соответствует всем строкам, которые не только содержат числа?Если у нас есть эти строки:

  • abc
  • a4c
  • 4bc
  • ab4
  • 123

Оно должно соответствовать четырем первым, но не последнему.Я пытался поиграться в RegexBuddy с предвкушением и прочим, но, похоже, не могу понять это.

Ответы [ 11 ]

40 голосов
/ 30 сентября 2010
(?!^\d+$)^.+$

Здесь указано, что строки не содержат всех цифр и соответствуют всей строке.

10 голосов
/ 30 сентября 2010

Если я что-то упустил, я думаю, что самым кратким регулярным выражением будет ...

/\D/

... или, другими словами, есть ли в строке не-цифра?

7 голосов
/ 11 мая 2011

jjnguy правильно (если немного избыточно) в более ранней редакции .

.*?[^0-9].*

@ Чад , ваше регулярное выражение,

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

, вероятно, должен допускать использование не букв (например, знаков препинания), хотя в примерах Свиша такого не было.Основным требованием Свиша было: не все должны быть цифрами.

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

Тогда вам не нужен знак +, так как все, что вам нужно, это гарантировать, что там есть 1 не цифра (там может быть больше)как указано. * на концах).

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

Далее вы можете покончить с \ b на любом конце, так как это ненужные ограничения (ссылаясь на alphanum и _).

.*[^0-9].*

Наконец, обратите внимание, что это последнее регулярное выражение показывает, что проблема может быть решена только с помощью основ, тех основ, которые существовали в течение десятилетий (например, нет необходимости в функции прогнозирования).По-английски вопрос был логически эквивалентен простому запросу, чтобы в строке был найден один контрпримерный пример.

Мы можем проверить это регулярное выражение в браузере, скопировав следующее в строку адреса, заменив строку "6576576i7567 "с тем, что вы хотите проверить.

javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));
7 голосов
/ 30 сентября 2010
/^\d*[a-z][a-z\d]*$/

Может быть цифрой в начале, затем хотя бы одной буквой, затем буквами или цифрами

4 голосов
/ 21 января 2016

Попробуйте это:

/^.*\D+.*$/

Возвращает true, если есть какой-либо символ, который не является числом.Прекрасно работает со всеми языками.

3 голосов
/ 30 сентября 2010

Поскольку вы сказали " match ", а не просто подтвердите, следующее регулярное выражение будет правильно соответствовать

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

Проходные тесты:

abc
a4c
4bc
ab4
1b1
11b
b11

Неудачные тесты:

123
2 голосов
/ 15 декабря 2016

, если вы пытаетесь сопоставить миры, в которых есть хотя бы одна буква, но они образованы цифрами и буквами (или просто буквами), я использовал следующее:

(\d*[a-zA-Z]+\d*)+
0 голосов
/ 27 сентября 2018

Мне пришлось сделать что-то подобное в MySQL, и мне показалось, что сработало более упрощенное:

, где имя поля regexp ^[a-zA-Z0-9]+$ и имя поля NOT REGEXP ^[0-9]+$

Этопоказывает все поля, которые являются алфавитными и буквенно-цифровыми, но все поля, которые являются только числовыми, скрыты.Кажется, это работает.

пример:

name1 - Отображается
name - Отображается
name2 - Отображается
name3 - Отображается
name4 - Отображается
n4ame- отображается
324234234 - не отображается

0 голосов
/ 25 апреля 2018

Я использую /^[0-9]*$/gm в своем коде JavaScript, чтобы увидеть, является ли строка только числами. Если да, то он должен потерпеть неудачу, иначе он вернет строку.

Ниже приведен фрагмент кода с тестовыми примерами:

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));
0 голосов
/ 25 апреля 2018
.*[^0-9]{1,}.*

У нас отлично работает.

Мы хотим использовать использованный ответ, но он не работает в модели YANG.

А тот, который я привел здесь, понятен и понятен: начало и конец могут быть любыми символами, но должен быть хотя бы один нечисловой символ, который является наибольшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...