RegEx для Javascript, чтобы разрешить только буквенно-цифровой
Мне нужно найти reg ex, который позволяет только буквенно-цифровой. Пока что все, что я пробую, работают, только если строка буквенно-цифровая, то есть содержит как букву, так и цифру. Я просто хочу один, который позволил бы и то и другое и не требовал обоих.
23 ответа
/^[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
Если вы хотите вернуть замененный результат, то это будет работать:
var a = 'Test123*** TEST';
var b = a.replace(/[^a-z0-9]/gi,'');
console.log(b);
Это вернуло бы:
Test123TEST
Обратите внимание, что gi необходим, потому что он означает глобальный (не только при первом совпадении) и регистронезависимый, поэтому у меня вместо z есть a-zA-Z. И ^ в скобках означает "что-то не в этих скобках".
ВНИМАНИЕ: Буквенно-цифровое прекрасно, если это именно то, что вы хотите. Но если вы используете это на международном рынке, например, имя человека или географическую область, то вам необходимо учитывать символы Юникода, что не сработает. Например, если у вас есть имя, подобное "Álvarö", это сделает его "lvar".
Используйте слово класс символов. Следующее эквивалентно ^[a-zA-Z0-9_]+$
:
^\w+$
Объяснение:
- ^ начало строки
- \w любой символ слова (AZ, az, 0-9, _).
- конец строки
использование /[^\w]|_/g
если вы не хотите соответствовать подчеркиванию.
/^([a-zA-Z0-9 _-]+)$/
Вышеупомянутое регулярное выражение разрешает пробелы в строке и ограничивает специальные символы. Оно допускает только az, AZ, 0-9, пробел, подчеркивание и тире.
Для многоязычной поддержки:
var filtered = 'Hello Привет 你好 123_456'.match(/[\p{L}|\p{N}|\s]/gu).join('')
console.log(filtered) // --> "Hello Привет 你好 123456"
Это соответствует любой букве, цифре или пробелу на большинстве языков.
- [...] -> Соответствие условиям
- [a|b] -> Соответствует 'a' OR 'b'
- \ p {L} -> Соответствует любой букве на любом языке
- \ p {N} -> Соответствует любому числу на любом языке
- \ s -> Соответствует пробелу
- / g -> Не останавливаться после первого матча
- / u -> Поддержка сопоставления с образцом Юникода
^\s*([0-9a-zA-Z]*)\s*$
или, если вы хотите минимум один символ:
^\s*([0-9a-zA-Z]+)\s*$
Квадратные скобки обозначают набор символов. ^ начало ввода. $ является концом ввода (или новой строки, в зависимости от ваших параметров). \s - это пробел.
Пробел до и после не является обязательным.
Скобки - это оператор группировки, который позволяет вам извлекать нужную вам информацию.
РЕДАКТИРОВАТЬ: убрал мое ошибочное использование набора символов \w.
Это будет работать
^(?=.*[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]+)$
в угловых может проверить как:
$scope.str = '12fUgdf';
var pattern = new RegExp('^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$');
$scope.testResult = pattern.test($scope.str);
Ссылка: Регулярное выражение для буквенно-цифровых символов в Angularjs
Вместо проверки правильности буквенно-цифровой строки вы можете достичь этого косвенно, проверив строку на наличие недопустимых символов. Сделайте это, проверив все, что соответствует дополнению действительной буквенно-цифровой строки.
/[^a-z\d]/i
Вот пример:
var alphanumeric = "someStringHere";
var myRegEx = /[^a-z\d]/i;
var isValid = !(myRegEx.test(alphanumeric));
Обратите внимание на логический не оператор в isValid
, так как я проверяю, является ли строка ложной, не является ли она действительной.
У меня есть строка, аналогичная Samsung Galaxy A10s 6,2-дюймовый (2 ГБ,32 ГБ ROM) Android 9.0, (13MP+2MP)+ 8MP Dual 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
что я и хотел.
Возможно, есть лучшее решение, но это то, что я нашел, отлично работает для меня.
Расширьте прототип строки для использования в вашем проекте
String.prototype.alphaNumeric = function() {
return this.replace(/[^a-z0-9]/gi,'');
}
Использование:
"I don't know what to say?".alphaNumeric();
//Idontknowwhattosay
Немного поздно, но у меня это сработало:
/[^a-z A-Z 0-9]+/g
аз: что угодно от а до я.
AZ: что угодно от A до Z (верхний регистр).
0-9: любое число от 0 до 9.
Это разрешит все, что находится в квадратных скобках, поэтому допустим, вы хотите разрешить любой другой символ, например, «/» и «#», регулярное выражение будет примерно таким:
/[^a-z A-Z 0-9 / #]+/g
Этот сайт поможет вам протестировать ваше регулярное выражение перед написанием кода.https://regex101.com/
Не стесняйтесь изменять и добавлять в скобки все, что хотите. С Уважением :)
Похоже, что многие пользователи заметили, что эти регулярные выражения почти наверняка потерпят неудачу, если мы не будем строго работать на английском языке. Но я думаю, что есть простой путь вперед, который не был бы таким ограниченным.
- сделайте копию своей строки во всех ВЕРХНЕЙ ЧАСТИ
- сделать вторую копию строчными буквами
Любые символы, которые совпадают в этих строках, определенно не имеют буквенного характера.
let copy1 = originalString.toUpperCase();
let copy2 = originalString.toLowerCase();
for(let i=0; i<originalString.length; i++) {
let bIsAlphabetic = (copy1[i] != copy2[i]);
}
При желании вы также можете определять цифры, просто ища цифры от 0 до 9.
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>
Даже лучше чем Gayan Dissanayake
указал.
/^[-\w\s]+$/
Сейчас ^[a-zA-Z0-9]+$
может быть представлен как ^\w+$
Вы можете использовать \s вместо пробела. Обратите внимание, что \s заботится о пробелах, а не только об одном пробеле.
Введите этот код в свою SCRATCHPAD и посмотрите действие.
var str=String("Blah-Blah1_2,oo0.01&zz%kick").replace(/[^\w-]/ig, '');
Попробуйте это... Замените свой идентификатор поля на #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;
});
});
Сохраните эту константу
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
Буквенно-цифровые символы с учетом регистра:
if (/^[a-zA-Z0-9]+$/.test("SoS007")) {
alert("match")
}
Также, если вы искали только алфавитные символы, вы можете использовать следующее регулярное выражение:
/[^a-zA-Z]/gi
Пример кода в машинописном тексте:
let samplestring = "!#!&34!# Alphabet !!535!!! is safe"
let regex = new RegExp(/[^a-zA-Z]/gi);
let res = samplestring.replace(regex,'');
console.log(res);
Примечание: если вас интересует синтаксис , посетите и либо воспользуйтесь шпаргалкой, либо RegExпоиграйтеregexr с регулярными выражениями.
Изменить: буквенно-цифровой → алфавитный
Вот способ проверки:
/**
* If the string contains only letters and numbers both then return true, otherwise false.
* @param string
* @returns boolean
*/
export const isOnlyAlphaNumeric = (string: string) => {
return /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$/.test(string);
}
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>
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;
});