RegEx для Javascript, щоб дозволяти лише буквено-цифрові


237

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

Відповіді:


512
/^[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

Оновлення (підтримка універсальних символів)

якщо вам потрібно, щоб ця програма regexp підтримує універсальний символ, тут можна знайти список символів Unicode.

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

це підтримає персидський.


50
[az] не відповідає міжнародним символам.
Ерік Норманд

23
Нічого собі - я не думаю, що я ніколи не досконало розумів регекс, поки він не був розбитий таким простим способом. Дякую!
Метт Кашатт

Проблема - без / г, ви заміняєте сірники лише до завершення рядка.
Воломіке

5
інший спосіб був би, [^\W_]але [a-z0-9]/ я очевидний спосіб.
Vitim.us

36
@Greg, мені подобається, як ви пояснюєте свої відповіді, пов'язані з регулярними виразками. Регекси без пояснень, на мою думку, є марними. Тому що ви отримуєте це одноразове "так, це працює", і раптом, коли вам потрібно змінити його, ви повертаєтеся відразу з іншим випадком використання, а не насправді дізнаєтесь, що робить регекс . Крім того, вам легше зрозуміти, ніж документація по регулярному
вибору

147

Якщо ви хочете повернути замінений результат, то це спрацює:

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

Це поверне:

Test123TEST

Зауважте, що gi необхідний, оскільки він означає глобальний (не лише на першому матчі) і нечутливий до регістру, тому я маю az замість a-zA-Z. І ^ всередині дужок означає "нічого, що не в цих дужках".

ПОПЕРЕДЖЕННЯ: Буквено-цифрові великі, якщо це саме те, що вам потрібно. Але якщо ви використовуєте це на міжнародному ринку на зразок імені людини чи географічного району, тоді вам потрібно обліковувати символи Unicode, що це не робитиме. Наприклад, якщо у вас є назва типу "Вlvarö", це зробить це "lvar".


3
Це чудова відповідь із поясненням. Не забудьте дозволити місця, якщо вони потрібні. .замінити (/ [^ a-z0-9 \] / gi, '')
Джо Джонстон

82

Використовуйте клас символів слова. Далі еквівалентно ^[a-zA-Z0-9_]+$:

^\w+$

Пояснення:

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

Використовуйте, /[^\w]|_/gякщо ви не хочете збігати підкреслення.


20
\ w насправді еквівалентно [a-zA-Z_0-9], тому ваш RegEx також відповідає підкресленням [_].
Мартін Браун

майже буквено-цифровий зовсім не буквено-цифровий, але спасибі ваші
анси

Щоправда, не сувора відповідь на запитання Q, але саме те, що я шукав ..
прототип

Вибачте, але це не відповідає міжнародним персонажам, таким як Ä
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 - пробіл.

Пробіл до і після не є обов'язковим.

В дужках є оператором групування, який дозволяє вам отримати потрібну інформацію.

EDIT: видалено моє помилкове використання \ w набору символів.


6

Замість перевірки на дійсну буквено-цифрову рядок, ви можете досягти цього побічно, перевіряючи рядок на наявність недійсних символів. Зробіть це, перевіривши, чи немає у відповідь доповнення дійсного буквено-цифрового рядка.

/[^a-z\d]/i    

Ось приклад:

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

Зверніть увагу на логічного оператора не isValid, оскільки я перевіряю, чи є рядок помилковим, чи не є він дійсним.


6

Це спрацює

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

Він приймає лише літерні букви
alfhanumeriuc: тестові випадки pased:

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 do 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

У мене рядок схожий на 6,2-дюймовий (2 ГБ, 32 ГБ ROM) Samsung Galaxy A10s Android 9,0, (13 МП + 2 МП) + 8 Мп смартфон з двома SIM-картами 4000mAh 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

Так. Завдяки наведеному вище коду, ви можете перевірити, натиснувши фрагмент запуску коду.
Pranav Бхат

jquery - бібліотека javascript
Pranav Bhat

ми можемо використовувати jquery замість javascript, це буде легко :)
Pranav Bhat

Я Соррі, ви мали рацію .. Я опублікував ще одного з javascript! Дякую тонну!
Pranav Бхат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.