Soru Alfasayısal ve altçizgi için düzenli ifade


Bir dizenin yalnızca büyük ve küçük harf, sayı ve altçizgi içerip içermediğini kontrol eden düzenli bir ifadeye sahip olmak isterim.


450
2017-12-03 04:25


Menşei


Farklı regex motorlarının alfanümeriklere uymak için farklı araçlara sahip olması üzücü. Bunun gibi bir soru (belirsiz, dil / regex lezzeti belirtilmedikçe) her bir lezzet üzerinde çok uzun ya da en azından çok organize bir cevap gerektirir. - Wiktor Stribiżew


Cevaplar:


İçeren bir dizeyle eşleştirmek için bir tek bu karakterleri (veya boş bir dize) deneyin

"^[a-zA-Z0-9_]*$"

Bu, .NET düzenli ifadeler ve muhtemelen birçok başka dil için de çalışır.

Kırmak:

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

Boş dizelere izin vermek istemiyorsanız, yerine + kullanın.

DÜZENLE Başkalarının da işaret ettiği gibi, bazı normal ifade dilleri için [a-zA-Z0-9_]. .NET regex dilinde ECMAScript davranışını açabilir ve kullanabilirsiniz. \w kestirme olarak (verimsiz ^\w*$ veya ^\w+$). Diğer dillerde ve varsayılan olarak .NET'te olduğunu unutmayın. \w biraz daha geniştir ve diğer türdeki unicode karakterlerle de eşleşecektir (bunu işaret ettiği için Jan'e teşekkür ederiz). Yani gerçekten eşleşmek istiyorsan bir tek açık (daha uzun) formu kullanan bu karakterler muhtemelen en iyisidir.


754
2017-12-03 04:33



Eğer Almanya'ya giderseniz ya da herhangi bir Alman metnini görürseniz, ne dediğimi görürsünüz. - Windows programmer
\ w ve [A-Za-z0-9_] çoğu regex çeşidinde eşdeğer değildir. \ w, aksan harfli harfler, diğer komut dosyalarından mektuplar vb. içerir. - Jan Goyvaerts
Asıl soru "büyük ve küçük harfler" demişti, bu yüzden Latin olmayan alfabelerden gelen "harflerin" eşleşmesi gerektiği görülüyordu. - Trejkaz
[\p{upper}\p{lower}\p{gc=Number}_] Birleştirme karakterleri olmadığı varsayılarak, bu hakkı gerçekleştirmeniz gereken her şey. - tchrist
Preg_match'in deseninizin normalde eğik çizgiler olan sınırlayıcılarla kapatılmasını gerektirir. Yani "/ ^ [a-zA-Z0-9 _] * $ /" 'ye ihtiyacınız var. Daha fazla bilgi için bu soruya bakın: stackoverflow.com/questions/6445133/.... Ayrıca bu sayfaya bakınız: forums.phpfreaks.com/topic/... - Charlie


Burada çok fazla ayrıntı var ve derinden buna karşıyım, sonuçta benim cevabım şöyle olurdu:

/^\w+$/

\w eşdeğerdir [A-Za-z0-9_]Ne istediğinizi tam olarak. (karışıma unicode eklemezsek)

Kullanmak + niceleyici bir veya daha fazla karakterle eşleşir. Boş bir dizgiyi de kabul etmek istiyorsanız * yerine.


242
2017-12-05 05:25



\w genellikle ASCII ile sınırlı değildir. - tchrist
Dünyadaki tek dil İngilizce değil, bu kabul edilen cevap olmalı, [a-z] ve varyasyonları. \w Latince olmayan karakterler de yakalar. Sevmek šēēā veya кукареку - Alex
Bu cevap neden listede daha yüksek değil? - Lupus Ossorum


Her karakterin sizin gereksinimlerinizle uyumlu olduğunu kontrol etmek istersiniz, bu yüzden kullanıyoruz:

[A-Za-z0-9_]

Ve hatta shorthand sürümünü kullanabilirsiniz:

\w

Hangi eşdeğerdir (bazı normal ifadelerde, bu yüzden kullanmadan önce kontrol ettiğinizden emin olun). Sonra tüm dizenin eşleşmesi gerektiğini belirtmek için şunları kullanırsınız:

^

Dizenin bu karakterle başlaması gerektiğini belirtmek için

$

Dizenin bu karakterle bitmesi gerektiğini belirtmek için. Sonra kullan

\w+ or \w*

"1 veya daha fazla" veya "0 veya daha fazla" belirtmek için. Hepsini bir araya getirmek, biz var:

^\w*$

32
2017-12-03 05:08



\ w ve [A-Za-z0-9_] çoğu regex çeşidinde eşdeğer değildir. \ w, aksan harfli harfler, diğer komut dosyalarından mektuplar vb. içerir. - Jan Goyvaerts


Her ne kadar daha ayrıntılı olsa da \w, Ben tam POSIX karakter sınıf isimlerinin okunabilirliğini takdir ediyorum ( http://www.zytrax.com/tech/web/regex.htm#special ), derdim ki:

^[[:alnum:]_]+$

Ancak, yukarıdaki linklerdeki belgeler \w "0 - 9, A - Z ve a - z (POSIX [: alnum:] eşdeğeri)" içindeki herhangi bir karakteri eşleştirecek, "Bunu doğru olarak bulamadım. İle değil grep -P neyse. Kullandığınızda altçubu açıkça belirtmeniz gerekir [:alnum:] ama kullanmazsan \w. Kısa ve tatlı için aşağıdakileri yenemezsin:

^\w+$

Okunabilirlik ile birlikte, POSIX karakter sınıflarını kullanarak (http://www.regular-expressions.info/posixbrackets.html), normal ifadelerin ASCII olmayan dizeler üzerinde çalışabileceği anlamına gelir; bu aralık tabanlı ifadeler, diğer karakter kümelerinden farklı olabilecek ASCII karakterlerinin temelindeki sıralamaya dayanması nedeniyle oluşur ve bu nedenle ASCII olmayan bazı karakterleri hariç tutar ( yakalamak isteyebileceğiniz œ) gibi harfler.


20
2018-06-09 22:53





Um ... soru: En az bir karaktere sahip olmalı mı yoksa yok mu? Boş bir dize olabilir mi?

^[A-Za-z0-9_]+$

En az bir büyük harf veya küçük harf alfanümerik veya alt çizgi yapacak. Eğer sıfır uzunluğa sahipse, o zaman + için yerine koy *

^[A-Za-z0-9_]*$

Düzenle:

Eğer aksanların dahil edilmesi gerekiyorsa (cedilla - ç gibi) o zaman yukarıdaki ile aynı olan, ancak aksan karakterlerini içeren sözcük karakterini kullanmanız gerekir:

^\w+$

Veya

^\w*$

19
2017-12-03 04:31



Şimdi bahsettiğin gibi, bir sürü Fransız karakterini de kaçırdım ... - BenAlabaster
\ w, daha az yazarak eforla [\ w] ile aynıdır - Jan Goyvaerts
Evet, hala + veya * 'ye ihtiyacınız var ve ^ ve $ - \ w sadece kelime karakterleri içerdiğini kontrol ediyor, öyle değil bir tek kelime karakterleri içeriyor ... - BenAlabaster
garip, bu hala $ işareti veriyor. - Induster
@Induster, BenAlabaster'ın az önce işaret ettiği şey yüzünden. - Sebas


Bilgisayar Bilimi'nde, bir Alfasayısal değer genellikle, ilk karakterin bir sayı olmadığı, ancak bir alfabe veya alt çizgi olduğu anlamına gelir. Daha sonra karakter olabilir 0-9, A-Z, a-zveya alt çizgi (_).

Bunu nasıl yapacağın:

Php altında test edilmiştir:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

ya da bunu al

^[A-Za-z_][A-Za-z\d_]*$

ve geliştirme dilinize yerleştirin.


12
2018-01-31 13:38





Nasıl hakkında:

^([A-Za-z]|[0-9]|_)+$

... açık olmak isterseniz veya:

^\w+$

... özlü dilerseniz (Perl sözdizimi).


10
2017-12-03 04:31





"en az bir" şeyi yapmak için lookaheads kullanın. İnan bana daha kolay.

İşte en az bir rakam ve bir harf içeren 1-10 karakter gerektiren bir örnek:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

NOT: \ w kullanmış olabilir ama sonra ECMA / Unicode ile ilgili düşünceler \ w "word karakterinin" karakter kapsamını arttırır.


10
2017-11-12 18:20



Çok teşekkür ederim... - Krishna Prasad
Listeye _ ve - eklemek istiyorsak nasıl yapacağız? - Rahi