Проверка формата ввода Java Script - PullRequest
2 голосов
/ 04 июня 2019

Я хотел проверить приведенный ниже формат одного из полей ввода

1111-111-111 //4digits- 3digits- 3digits

Я попробовал описанный ниже метод, но он не работает.Любая идея о том, что я ошибаюсь?

function(value) {
    var patt = "/^\d{4}-d{3}-d{3}$/";
    var res = value.match(patt);
    if (!res) {
        return {
            status: 2,
            message: 'Input should be formatted as 0000-000-000'
        };
    } else {
        return {
            status: 0
        };
    }
}

Кроме того, учитывая строку, я хотел, чтобы символы в определенных индексах были пустыми.например, всего 23 символа, где 2, 9, 11 и 13-21 - пробел.Я новичок в регулярных выражениях Javascript, как мы применяем их?

Ответы [ 3 ]

2 голосов
/ 04 июня 2019

Если мы хотим передать только 4-3-3 цифры, мы можем просто сделать это, используя:

^[0-9]{4}-[0-9]{3}-[0-9]{3}$

Демо

или

^\d{4}-\d{3}-\d{3}$

Демо

Если мы хотим также захватить номер телефона, мы добавим группу захвата:

^([0-9]{4}-[0-9]{3}-[0-9]{3})$

const regex = /^[0-9]{4}-[0-9]{3}-[0-9]{3}$/gm;
const str = `1111-111-111
1111-111-1111
8888-888-888`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

2 голосов
/ 04 июня 2019

Ваше регулярное выражение неверно.Исправьте это:

/^\d{4}-\d{3}-\d{3}$/

Ваша вторая часть и третья часть - это символы "d", а не цифры.И удалите символы " при объявлении регулярного выражения.

var patt = /^\d{4}-\d{3}-\d{3}$/;
1 голос
/ 04 июня 2019

Первый шаблон не работает, как предполагалось, потому что для совпадения с цифрой вы должны экранировать d, например \d, иначе d{3} будет совпадать 3 раза с символом d, и шаблон не должен быть в двойных кавычках, номежду / ... /

let test = function(value) {
  var patt = /^\d{4}-\d{3}-\d{3}$/;
  var res = value.match(patt);
  if (!res) {
    return {
      status: 2,
      message: 'Input should be formatted as 0000-000-000'
    };
  } else {
    return {
      status: 0
    };
  }
};

console.log(test("1111-111-111"));

Для сопоставления пробелов в местах 2, 9, 11 и 13-21 в строке вы можете использовать квантификаторы и \S, чтобы соответствоватьнепробельный символ:

^\S \S{6} \S \S {11}$

Regex demo

Если вы хотите сопоставить по индексу, основанному на нулевом индексе, шаблон будет выглядеть так:

^\S\S \S{6} \S \S {10}$

Regex demo

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