Я не могу получить регулярное выражение для сопоставления всех букв, цифр и символов. '": - и / работать правильно - PullRequest
1 голос
/ 14 октября 2019

Я пару часов чесал голову, пытаясь найти регулярное выражение, которое найдет все строки, которые следуют шаблону: строчные или прописные буквы, цифры и символы . : ' " / и -.

Мое текущее регулярное выражение:

var patt = new RegExp("[^a-zA-Z0-9:.\"/'-]+");. 

Для контекста, вот как оно используется при проверке формы в JavaScript:

var quote = document.forms["myForm"]["quote"].value;
var quoteWordCount = quote.trim().split(/\s+/).length;
var patt = new RegExp("[^a-zA-Z0-9:.\"/'-]+");
var quoteResult = patt.test(quote);
if (quote.length < 2) {
    alert("quote can't be less than 2 characters");
    return false;
}
if (quoteWordCount < 4) {
    alert("Your quote must contain 4 or more words.");
    return false;
}

if (quoteResult) {
    alert("Please enter a valid quote.");
    return false;
}

Прямо сейчас, по какой-то причине он отвергает каждую отдельную строку, которую я ему даю, как те, которые он должен отклонять, так и те, которые он не должен. Например, он отклонит:

«Здравствуйте, коллеги-программисты»

, а также отклонит:

«Hello << >>там !! коллеги программисты. "

Ответы [ 2 ]

1 голос
/ 14 октября 2019

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

  • Не используйте отрицание ^.

  • Добавьте место к своему регулярному выражениюпотому что это разрешенный символ между словами.

  • Сопоставьте всю строку, начав регулярное выражение с ^ и завершив его $.

Полученное регулярное выражение ^[a-zA-Z0-9 :.\"/'-]+$. Вот тест:

var patt = new RegExp("^[a-zA-Z0-9 :.\"/'-]+$");

var quote = "Hello there fellow /programmers";
console.log(patt.test(quote));
quote = "Hello<<>> there!! fellow programmers.";
console.log(patt.test(quote));
0 голосов
/ 14 октября 2019

Может быть,

[A-Za-z0-9:."'-]+

может работать нормально.

const regex = /[A-Za-z0-9:."'-]+/g;
const str = `abcad^&*
ABCadfa909%^&*
abc-9.8ad-"ABC"-adf'-'`;
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}`);
    });
}

Если вы хотите упростить / изменить / изучить выражение, это объяснено на верхней правой панели regex101.com . При желании вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

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

enter image description here

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