Mam stronę z polem tekstowym, w której użytkownik powinien wprowadzić 24-znakowy kod rejestracyjny (litery i cyfry, bez rozróżniania wielkości liter). Kiedyś maxlength
ograniczałem użytkownika do wprowadzania 24 znaków.
Kody rejestracyjne są zazwyczaj podawane jako grupy znaków oddzielone myślnikami, ale chciałbym, aby użytkownik wprowadził kody bez myślników.
Jak napisać kod JavaScript bez jQuery, aby sprawdzić, czy dany ciąg znaków wprowadzony przez użytkownika nie zawiera myślników, a jeszcze lepiej, zawiera tylko znaki alfanumeryczne?
javascript
string
Vivian River
źródło
źródło
inArray
.Odpowiedzi:
Aby znaleźć „cześć” w
your_string
W przypadku wartości alfanumerycznych można użyć wyrażenia regularnego:
http://www.regular-expressions.info/javascript.html
Wyrażenie regularne alfanumeryczne
źródło
/hello/g.test(your_string)
. Podczas gdy indexOf działa, myślę, że test wyrażenia regularnego pokazuje lepszą historię tego, co próbujesz osiągnąć. Jeśli próbuję znaleźć sekwencję znaków w ciągu, indeks nie ma znaczenia.Z ES6 .includes ()
E: Nieobsługiwany przez IE - zamiast tego możesz użyć narzędzia Tilde
~
( Bitwise NOT ) z .indexOf ()W połączeniu z liczbą skuteczny jest operator Tilde
~N => -(N+1)
. Użyj go z podwójną negacją!!
( logiczne NIE ), aby przekonwertować liczby w boolach:źródło
Jeśli masz tekst w zmiennej
foo
:Spowoduje to przetestowanie i upewnienie się, że użytkownik wprowadził co najmniej jeden znak i wprowadził tylko znaki alfanumeryczne.
źródło
sprawdź, czy łańcuch (słowo / zdanie ...) zawiera określone słowo / znak
źródło
ES6 zawiera wbudowaną metodę (
includes
) w Stringprototype
, której można użyć do sprawdzenia, czy łańcuch zawiera inny ciąg, czy nie.Aby dodać tę metodę w nieobsługiwanych przeglądarkach, można użyć następującego wypełniania. ( Źródło )
źródło
Aby to zrobić, użyj wyrażenia regularnego.
źródło
Wszyscy za bardzo się zastanawiacie. Wystarczy użyć prostego wyrażenia regularnego, to twój najlepszy przyjaciel.
Dowiedz się Regex w 5 minut?
źródło
if ( string1.test(regex) ) { alert("He likes pizza!"); }
var regex = /^[a-z0-9]+$/i
regex.test(string1)
regex.test(str)
. (str.match(regex)
jest podobny, ale nie zwraca wartości logicznej).Jeśli szukasz znaków na początku lub na końcu ciągu, możesz także użyć
startsWith
iendsWith
źródło
źródło
Aby przetestować tylko znaki alfanumeryczne:
Wyrażenie regularne testuje 1 lub więcej (+) zestawu znaków 0-9, AZ i az, zaczynając od początku wejścia (^) i kończąc na końcu wejścia ($).
źródło
Odpowiedź Kevinsa jest poprawna, ale wymaga „magicznej” liczby w następujący sposób:
W takim przypadku musisz wiedzieć, że -1 oznacza „ nie znaleziono” . Myślę, że nieco lepsza wersja to:
źródło
indexOf()
zwróci -1, jeśli łańcuch nie zostanie znaleziony. Nie jest to więc więcej magii niż używanie 0 .Spróbuj tego:
Oto przykład: http://jsfiddle.net/oliverni/cb8xw/
źródło
Przydaje się również funkcja wyszukiwania ciągu. Wyszukuje zarówno znak, jak i podłańcuch w danym ciągu.
'apple'.search('pl')
zwroty2
'apple'.search('x')
powrót-1
źródło
Jeśli czytasz dane z DOM, takie jak na przykład znacznik ap lub h1, będziesz chciał użyć dwóch rodzimych funkcji JavaScript, jest to ciche łatwe, ale ograniczone do es6, przynajmniej dla rozwiązania, które zamierzam dostarczyć. Przeszukam wszystkie tagi p w DOM, jeśli tekst zawiera „T”, cały akapit zostanie usunięty. Mam nadzieję, że ten mały przykład pomoże komuś pomóc!
HTML
JS
źródło
Działa idealnie. Ten przykład pomoże dużo.
źródło
Demonstracja: Metoda include () znajduje znak „zawiera” w całym ciągu, zwraca wartość true.
źródło
Sprawdź, czy ciąg znaków jest alfanumeryczny czy alfanumeryczny + niektóre dozwolone znaki
Najszybsza metoda alfanumeryczna jest prawdopodobnie wymieniona w: Najlepszy sposób na sprawdzenie alfanumeryczne w JavaScript ponieważ działa bezpośrednio na zakresach liczb.
Następnie, aby pozwolić na kilka innych dodatkowych znaków, możemy po prostu umieścić je w
Set
celu szybkiego wyszukiwania.Uważam, że ta implementacja poprawnie poradzi sobie z parami zastępczymi .
GitHub w górę .
Testowane w Node.js 10.15.1.
źródło