英数字のみを許可するJavascript用のRegEx


237

英数字のみを許可する正規表現を見つける必要があります。これまでのところ、私が試すすべての人は、文字列が英数字、つまり文字と数字の両方を含む場合にのみ機能します。私はどちらか一方を許可し、両方を必要としないものを求めています。

回答:


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

更新(ユニバーサルキャラクターのサポート)

この正規表現がユニバーサル文字をサポートする必要がある場合は、Unicode文字のリストをここで見つけることができます

例えば: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

これはペルシャ語をサポートします。


50
[az]は国際文字と一致しません。
Eric Normand

23
うわー、この単純な方法で分解されるまで、正規表現を完全に理解したことはないと思います。ありがとう!
Matt Cashatt、2012

問題-/ gなしでは、行が折り返される前に一致を置き換えるだけです。
Volomike 2012

5
別の方法があります[^\W_]が、[a-z0-9]/ iは明白な方法です。
Vitim.us 2013年

36
@グレッグ、私はあなたがあなたの正規表現関連の答えを説明する方法を楽しんでいます。私の意見では、説明のない正規表現は一種の役に立たない。あなたは一度「ああ、それはうまくいく」という結果を得て、突然、それを変更する必要があるとき、正規表現実際に何をしているのかを学ぶのではなく、別のユースケースですぐに戻ってきます。さらに、正規表現のドキュメントよりも理解しやすいです:P
Chris Cirefice '19

147

置き換えられた結果を返したい場合、これはうまくいきます:

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

これは戻ります:

Test123TEST

最初の一致だけではなく、グローバルで大文字と小文字を区別しないため、giが必要であることに注意してください。かっこ内の^は、「これらのかっこ内にないもの」を意味します。

警告:英数字は、それがまさにあなたが望むものである場合に最適です。しかし、これを人の名前や地理的な地域などの国際市場で使用している場合は、Unicode文字を考慮する必要がありますが、これは機能しません。たとえば、「Âlvarö」のような名前がある場合、「lvar」になります。


3
これは説明に対する素晴らしい答えです。スペースが必要な場合は、スペースを考慮してください。.replace(/ [^ a-z0-9 \] / gi、 '')
Joe Johnston

82

単語文字クラスを使用します。以下はaと同等^[a-zA-Z0-9_]+$です。

^\w+$

説明:

  • ^文字列の始まり
  • \ w任意の単語文字(AZ、az、0-9、_)。
  • $文字列の終わり

/[^\w]|_/gアンダースコアを一致させたくない場合に使用します。


20
\ wは実際には[a-zA-Z_0-9]と同等であるため、RegExもアンダースコア[_]と一致します。
マーティンブラウン

ほとんど英数字はまったく英数字ではありませんが、あなたのansが私を助けてくれてありがとう
ajax333221

真の投稿としてQに、ない厳格な答えが、私が探していたまさに...
プロトタイプ

申し訳ありませんが、これはasなどの国際的な文字とは一致しません
Alex Mi

残念ながら、これは私のアクセントを削除します
ミゲル

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

上記の正規表現では、文字列内にスペースを含めることができ、特殊文字を制限します。az、AZ、0-9、スペース、アンダースコア、ダッシュのみを許可します。


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

または、最低1文字必要な場合:

^\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));

isValid文字列が有効かどうかではなく、文字列が偽かどうかをテストしているので、論理not演算子に注意してください。


6

これは動作します

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

英数字のみを受け入れます:
テストケースをパスしました:

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

または

こちらもお試しいただけます。この表現は、少なくとも1つの数字と1つの文字を満たし、他の特殊文字は満たしていません

^(?=.*[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. すべて小文字で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

これを試してください...フィールドIDを#name ... az(a to z)、AZ(A to Z)、0-9(0 to 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つのスペース文字だけでなく、空白も処理することに注意してください。


1

Samsung Galaxy A10s 6.2-Inch(2GB、32GB ROM)Android 9.0、(13MP + 2MP)+ 8MP Dual SIM 4000mAh 4G LTE Smartphone-Black(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は、NUMBERS、ALPHABETS、SPECIAL CHARECTERSのみを受け入れます

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

jqueryはJavaScriptライブラリです
Pranav Bhat

javascriptの代わりにjqueryを使用できます。簡単です:)
Pranav Bhat

私はあなたが正しかったことを残念に思います。私はjavascriptで別のものを投稿しました!トンありがとう!
Pranav Bhat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.