RegEx для Javascript, чтобы разрешить только буквенно-цифровые

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
263
0
443 601
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

^\s*([0-9a-zA-Z]*)\s*$

или, если вам нужен минимум один символ:

^\s*([0-9a-zA-Z]+)\s*$

Квадратные скобки обозначают набор символов. ^ - начало ввода. $ - это конец ввода (или новая строка, в зависимости от ваших параметров). \ s - это пробел.

Пробелы до и после необязательны.

Скобки - это оператор группировки, позволяющий извлекать нужную информацию.

Обновлено: удалено мое ошибочное использование набора символов \ w.

Ответ принят как подходящий
/^[a-z0-9]+$/i

^         Start of string
[a-z0-9]  a or b or c or ... z or 0 or 1 or ... 9
+         one or more times (change to * to allow empty string)
$         end of string    
/i        case-insensitive

Обновление (поддержка универсальных символов)

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

например: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

это поддержит персидский язык.

[a-z] не соответствует международным символам.

Eric Normand 25.02.2012 02:53

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

Matt Cashatt 01.07.2012 20:16

Проблема - без / g вы только заменяете совпадения перед переносом строки.

Volomike 13.08.2012 19:53

другим способом был бы [^\W_], но [a-z0-9] / i - очевидный путь.

Vitim.us 20.01.2013 09:53

@Greg, мне нравится, как вы объясняете свои ответы, связанные с регулярным выражением. Регулярные выражения без объяснений, на мой взгляд, бесполезны. Потому что вы получаете одноразовое «да, это работает», и внезапно, когда вам нужно его изменить, вы сразу же возвращаетесь с другим вариантом использования, вместо того, чтобы фактически изучать, что такое регулярное выражение делает. Кроме того, вас легче понять, чем документацию по регулярным выражениям: P

Chris Cirefice 19.12.2013 22:02

@matthewpatrickcashatt, Здесь то же самое. Я точно знаю? Почему регулярное выражение такое загадочное?

zero_cool 02.12.2015 22:56

У меня это не сработало. Вместо этого я использовал /[^\w]|_/g.

christo8989 09.08.2016 02:15

как проверить длину здесь

R.Anandan 29.03.2017 14:27

как использовать в функции, чтобы остались только эти символы, а все остальное было удалено?

Nikhil VJ 29.03.2018 17:34

@ksloan - Вы обратили внимание на последний элемент. / i без учета регистра. Надеюсь это ответит на твой вопрос.

Vimal Maheedharan 22.03.2019 09:36

Извините, этот ответ очень опасен, он захватывает только строчные буквы, вам нужно будет сделать [a-zA-Z0-9] или просто использовать \W, и это все, что нужно

Lukas 07.10.2019 14:17

Красивый!! + один от меня

Fouad Boukredine 12.11.2019 20:17

Приятный штрих с возможностью пустой строки. Очень полезно при проверке полей формы.

Oksana Romaniv 29.01.2020 16:15

Используйте класс символов слова. Следующее эквивалентно ^[a-zA-Z0-9_]+$:

^\w+$

Объяснение:

  • ^ начало строки
  • \ w любой символ слова (A-Z, a-z, 0-9, _).
  • $ конец строки

Используйте /[^\w]|_/g, если вы не хотите использовать подчеркивание.

\ w фактически эквивалентен [a-zA-Z_0-9], поэтому ваш RegEx также соответствует символам подчеркивания [_].

Martin Brown 23.12.2008 18:36

почти буквенно-цифровой вовсе не буквенно-цифровой, но спасибо, что ваш ответ мне очень помог

ajax333221 04.09.2011 08:14

Правда, не строгий ответ на Q, как написано, но именно то, что я искал ..

prototype 28.03.2012 05:41

Извините, но это не соответствует международным символам, таким как Ä

Alex Mi 20.04.2017 15:23

очень плохо, это убирает мои акценты

Miguel 14.06.2017 20:22

Если вы хотите вернуть замененный результат, это сработает:

var a = 'Test123*** TEST';
var b = a.replace(/[^a-z0-9]/gi,'');
console.info(b);

Это вернет:

Test123TEST

Обратите внимание, что gi необходимо, потому что оно означает глобальное (не только при первом совпадении) и без учета регистра, поэтому у меня есть a-z вместо a-zA-Z. А знак ^ внутри скобок означает «все, чего нет в этих скобках».

ВНИМАНИЕ: буквенно-цифровые символы - это здорово, если это именно то, что вам нужно. Но если вы используете это на международном рынке, например, для имени человека или географической области, вам необходимо учитывать символы Unicode, чего здесь не будет. Например, если у вас есть такое имя, как «Âlvarö», оно будет «lvar».

Это отличный ответ с объяснением. Не забывайте оставлять пробелы, если они вам нужны. .replace (/ [^ a-z0-9 \] / gi, '')

Joe Johnston 09.12.2016 23:24
/^([a-zA-Z0-9 _-]+)$/

указанное выше регулярное выражение допускает пробелы в строке и ограничивает использование специальных символов. a-z, A-Z, 0-9, пробел, подчеркивание и тире.

Даже лучше, чем указал Gayan Dissanayake.

/^[-\w\s]+$/

Теперь ^[a-zA-Z0-9]+$ можно представить как ^\w+$.

You may want to use \s instead of space. Note that \s takes care of whitespace and not only one space character.

Вместо проверки правильности буквенно-цифровой строки вы можете добиться этого косвенно, проверив строку на наличие недопустимых символов. Сделайте это, проверив все, что соответствует дополнять допустимой буквенно-цифровой строки.

/[^a-z\d]/i    

Вот пример:

var alphanumeric = "someStringHere";
var myRegEx  = /[^a-z\d]/i;
var isValid = !(myRegEx.test(alphanumeric));

Обратите внимание на оператор логического НЕ в isValid, поскольку я проверяю, является ли строка ложной, а не действительной.

Отличное решение

SavindraSingh 10.11.2020 11:05

Расширьте прототип строки для использования в вашем проекте

    String.prototype.alphaNumeric = function() {
        return this.replace(/[^a-z0-9]/gi,'');
    }

Применение:

    "I don't know what to say?".alphaNumeric();
    //Idontknowwhattosay

Это будет работать

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$

Он принимает только буквенно-цифровые символы:
пройдены тестовые случаи:

dGgs1s23 - valid
12fUgdf  - valid,
121232   - invalid, 
abchfe   - invalid,
 abd()*  - invalid, 
42232^5$ - invalid

или же

Вы также можете попробовать это. это выражение удовлетворяет как минимум одному числу и одному символу и никаким другим специальным символам

^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$

в angular можно проверить, например:

$scope.str = '12fUgdf';
var pattern = new RegExp('^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$');
$scope.testResult = pattern.test($scope.str);

PLUNKER DEMO

Реферал: Регулярное выражение для буквенно-цифровых символов в Angularjs

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

  1. сделайте копию вашей строки в верхнем регистре
  2. сделайте вторую копию в нижнем регистре

Любые символы, которые совпадают в этих строках, определенно не являются алфавитными по своей природе.

let copy1 = originalString.toUpperCase();
let copy2 = originalString.toLowerCase();
for(let i=0; i<originalString.length; i++) {
    let bIsAlphabetic = (copy1[i] != copy2[i]);
}

При желании вы также можете определять числа, просто ища цифры от 0 до 9.

Попробуйте это ... Замените идентификатор поля на #name ... а-я (от а до я), От А до Я (от А до Я), 0–9 (от 0 до 9)

jQuery(document).ready(function($){
    $('#name').keypress(function (e) {
        var regex = new RegExp("^[a-zA-Z0-9\s]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
            return true;
        }
        e.preventDefault();
        return false;
    });
});

Введите этот код в блокнот и посмотрите действие.

var str=String("Blah-Blah1_2,oo0.01&zz%kick").replace(/[^\w-]/ig, '');

Jquery принимает только ЧИСЛА, АЛФАВИТЫ и СПЕЦИАЛЬНЫЕ СИМВОЛЫ

<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
Enter Only Numbers: 
<input type = "text" id = "onlynumbers">
<br><br>
Enter Only Alphabets: 
<input type = "text" id = "onlyalpha">
<br><br>
Enter other than Alphabets and numbers like special characters: 
<input type = "text" id = "speclchar">

<script>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if (!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if (!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if ((e.key).match(letters)) e.preventDefault();
	});
    </script>
</body>
</html>
**JQUERY to accept only NUMBERS , ALPHABETS and SPECIAL CHARACTERS **


<!DOCTYPE html>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if (!(e.key).match(letters)) e.preventDefault();
    });

    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if (!(e.key).match(letters)) e.preventDefault();
    });

    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if ((e.key).match(letters)) e.preventDefault();
    });
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 

Введите только цифры:

Введите только алфавиты:

Введите символы, отличные от алфавитов и цифр, например специальные символы:

</body>
</html>

jquery - это не javascript

rsm 26.07.2019 23:52

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

Pranav Bhat 28.07.2019 15:14

jquery - это библиотека javascript

Pranav Bhat 28.07.2019 15:17

мы можем использовать jquery вместо javascript, это будет легко :)

Pranav Bhat 28.07.2019 15:18

Извините, что вы были правы .. Я разместил еще один с javascript! Благодаря тонну!

Pranav Bhat 28.07.2019 15:45

JAVASCRIPT принимает только ЦИФРЫ, АЛФАВИТЫ и СПЕЦИАЛЬНЫЕ СИМВОЛЫ

document.getElementById("onlynumbers").onkeypress = function (e) {
	onlyNumbers(e.key, e)
};

document.getElementById("onlyalpha").onkeypress = function (e) {
	onlyAlpha(e.key, e)
};

document.getElementById("speclchar").onkeypress = function (e) {
	speclChar(e.key, e)
};

function onlyNumbers(key, e) {
	var letters = /^[0-9]/g; //g means global
	if (!(key).match(letters)) e.preventDefault();
}

function onlyAlpha(key, e) {
	var letters = /^[a-z]/gi; //i means ignorecase
	if (!(key).match(letters)) e.preventDefault();
}

function speclChar(key, e) {
	var letters = /^[0-9a-z]/gi;
	if ((key).match(letters)) e.preventDefault();
}
<html>
   <head></head>
   <body>
      Enter Only Numbers: 
      <input id = "onlynumbers" type = "text">
      <br><br>
      Enter Only Alphabets: 
      <input id = "onlyalpha" type = "text" >
      <br><br>
      Enter other than Alphabets and numbers like special characters: 
      <input id = "speclchar" type = "text" >
   </body>
</html>

У меня есть строка, похожая на Смартфон Samsung Galaxy A10s с диагональю 6,2 дюйма (2 ГБ, 32 ГБ ПЗУ), Android 9.0, (13 МП + 2 МП) + 8 МП, две SIM-карты, 4000 мАч, 4G LTE - черный (BF19)

Вот что я сделал:

string.replace(/[^a-zA-Z0-9 ,._-]/g, '').split(',').join('-').split(' ').join('-').toLowerCase()

Обратите внимание, что я разрешил ,._-, а затем использовать split() и join() для замены , на - и пространство на - соответственно.

В итоге я получил что-то вроде этого: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20, это то, что я хотел.

Возможно, есть лучшее решение, но это то, что я нашел, отлично работает для меня.

Сохраните эту константу

const letters = /^[a-zA-Z0-9]+$/

теперь для проверки использования детали .match ()

const string = 'Hey there...' // get string from a keyup listner
let id = ''
// iterate through each letters
for (var i = 0; i < string.length; i++) {
  if (string[i].match(letters) ) {
    id += string[i]
  } else {
    // In case you want to replace with something else
    id += '-'  
  }
}
return id
Question is old, but it's never too late to answer

$(document).ready(function() {
  //prevent paste
  var usern_paste = document.getElementById('yourid');
  usern_paste.onpaste = e => e.preventDefault();

  //prevent copy
  var usern_drop = document.getElementById('yourid');
  usern_drop.ondrop = e => e.preventDefault();
});

$('#yourid').keypress(function (e) {
  var regex = new RegExp("^[a-zA-Z0-9\s]");
  var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
  if (regex.test(str)) {
      return true;
  }
  e.preventDefault();
  return false;
});

Это добавляет просто много нерелевантного кода, ничего не влияя на предыдущие ответы.

Jaromír Adamec 21.01.2021 18:01

Буквенно-цифровые символы с учетом регистра:

if (/^[a-zA-Z0-9]+$/.test("SoS007")) {
  alert("match")
}

Немного поздно, но у меня это сработало:

/[^a-z A-Z 0-9]+/g

a-z: что угодно от a до z.

A-Z: что угодно от A до Z (верхний регистр).

0-9: любое число от 0 до 9.

Это разрешит все, что находится в квадратных скобках, поэтому предположим, что вы хотите разрешить любой другой символ, например, «/» и «#», регулярное выражение будет примерно таким:

/[^a-z A-Z 0-9 / #]+/g

Этот сайт поможет вам протестировать ваше регулярное выражение перед написанием кода. https://regex101.com/

Не стесняйтесь изменять и добавлять в скобки все, что хотите. С Уважением :)

Для многоязычной поддержки:

var filtered = 'Hello Привет 你好 123_456'.match(/[\p{L}|\p{N}|\s]/gu).join('')
console.info(filtered) // --> "Hello Привет 你好 123456"

Это соответствует любой букве, цифре или пробелу на большинстве языков.

  • [...] -> Соответствие условиям
  • [a | b] -> Соответствует 'a' OR 'b'
  • \ p {L} -> Соответствует любой букве на любом языке
  • \ p {N} -> Соответствует любому числу на любом языке
  • \ s -> Соответствует пробелу
  • / g -> Не останавливаться после первого матча
  • / u -> Поддержка сопоставления с образцом Юникода

Ссылка: https://javascript.info/regexp-unicode

Другие вопросы по теме