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


238

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

Ответы:


513
/^[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 _.-]+)$/

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


50
[az] не соответствует международным символам.
Эрик Норманд,

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

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

5
другой путь будет, [^\W_]но [a-z0-9]/ я очевидный путь.
Vitim.us

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

147

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

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

Это вернуло бы:

Test123TEST

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

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


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

82

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

^\w+$

Объяснение:

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

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


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

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

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

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


38
/^([a-zA-Z0-9 _-]+)$/

Вышеупомянутое регулярное выражение допускает пробелы в строке и ограничивает специальные символы. Оно допускает только az, AZ, 0-9, пробел, подчеркивание и тире.


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

или, если вы хотите минимум один символ:

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

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

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

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

РЕДАКТИРОВАТЬ: убрал мое ошибочное использование набора символов \ w.


6

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

/[^a-z\d]/i    

Вот пример:

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

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


6

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

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

Он принимает только символы
alphanumeriuc:

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

или

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

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

в угловых может проверить, как:

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

ПЛАНКЕР ДЕМО

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


4

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

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

Использование:

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

3

Введите этот код в свою SCRATCHPAD и посмотрите действие.

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

2

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

  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.


2

Попробуйте это ... Замените свой идентификатор поля на #name ... az (от a до z), AZ (от A до Z), 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;
    });
});

2

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>


1

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

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

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

Вы можете использовать \ s вместо пробела. Обратите внимание, что \ s заботится о пробелах, а не только об одном пробеле.


1

У меня есть строка, похожая на Samsung Galaxy A10s 6,2-дюймовый (2 ГБ, 32 ГБ ПЗУ) Android 9.0, (13 Мп + 2 Мп) + 8 Мп Dual 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чего я и хотел.

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


0

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

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

-1

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>

1
JQuery не является Javascript
RSM

Да. Благодаря вышеприведенному коду, вы можете проверить его, нажав кнопку «Запустить фрагмент кода».
Пранав Бхат

JQuery это библиотека JavaScript
Пранав Бхат

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

Я сожалею, что вы были правы .. Я отправил еще один с Javascript! Благодаря тонну!
Пранав Бхат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.