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

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

Greg
источник
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».

Volomike
источник
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, поскольку я проверяю, является ли строка ложной, а не действительной.

Schalk
источник
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! Благодаря тонну!
Пранав Бхат