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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


^\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 _.-]+)$/
это поддержит персидский язык.
Вау - я не думаю, что когда-либо полностью понимал регулярное выражение, пока он не был разбит таким простым способом. Спасибо!
Проблема - без / g вы только заменяете совпадения перед переносом строки.
другим способом был бы [^\W_], но [a-z0-9] / i - очевидный путь.
@Greg, мне нравится, как вы объясняете свои ответы, связанные с регулярным выражением. Регулярные выражения без объяснений, на мой взгляд, бесполезны. Потому что вы получаете одноразовое «да, это работает», и внезапно, когда вам нужно его изменить, вы сразу же возвращаетесь с другим вариантом использования, вместо того, чтобы фактически изучать, что такое регулярное выражение делает. Кроме того, вас легче понять, чем документацию по регулярным выражениям: P
@matthewpatrickcashatt, Здесь то же самое. Я точно знаю? Почему регулярное выражение такое загадочное?
У меня это не сработало. Вместо этого я использовал /[^\w]|_/g.
как проверить длину здесь
как использовать в функции, чтобы остались только эти символы, а все остальное было удалено?
@ksloan - Вы обратили внимание на последний элемент. / i без учета регистра. Надеюсь это ответит на твой вопрос.
Извините, этот ответ очень опасен, он захватывает только строчные буквы, вам нужно будет сделать [a-zA-Z0-9] или просто использовать \W, и это все, что нужно
Красивый!! + один от меня
Приятный штрих с возможностью пустой строки. Очень полезно при проверке полей формы.
Используйте класс символов слова. Следующее эквивалентно ^[a-zA-Z0-9_]+$:
^\w+$
Объяснение:
Используйте /[^\w]|_/g, если вы не хотите использовать подчеркивание.
\ w фактически эквивалентен [a-zA-Z_0-9], поэтому ваш RegEx также соответствует символам подчеркивания [_].
почти буквенно-цифровой вовсе не буквенно-цифровой, но спасибо, что ваш ответ мне очень помог
Правда, не строгий ответ на Q, как написано, но именно то, что я искал ..
Извините, но это не соответствует международным символам, таким как Ä
очень плохо, это убирает мои акценты
Если вы хотите вернуть замененный результат, это сработает:
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, '')
/^([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, поскольку я проверяю, является ли строка ложной, а не действительной.
Отличное решение
Расширьте прототип строки для использования в вашем проекте
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);
Реферал: Регулярное выражение для буквенно-цифровых символов в Angularjs
Похоже, что многие пользователи заметили, что эти регулярные выражения почти наверняка не сработают, если мы не работаем строго на английском языке. Но я думаю, что есть легкий путь вперед, который не был бы таким ограниченным.
Любые символы, которые совпадают в этих строках, определенно не являются алфавитными по своей природе.
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
Ага. Благодаря тому, что приведенный выше код работает, вы можете проверить, щелкнув фрагмент кода запуска.
jquery - это библиотека javascript
мы можем использовать jquery вместо javascript, это будет легко :)
Извините, что вы были правы .. Я разместил еще один с javascript! Благодаря тонну!
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;
});
Это добавляет просто много нерелевантного кода, ничего не влияя на предыдущие ответы.
Буквенно-цифровые символы с учетом регистра:
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-z] не соответствует международным символам.